程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

Python 文件操作

发布于2019-08-05 17:58     阅读(676)     评论(0)     点赞(4)     收藏(0)


 

使用os模块操作文件本身

函数            

描述

os.unlink(filePath)

删除文件

os.remove(filePath)

同上

   

os.rmdir(dirPath)

删除文件夹,必须要是空文件夹才能删除

os.removedirs(dirPath)

 同上

 

 

os.rename(oldPath,newPath)

重命名文件、文件夹。要求2个路径只有文件名部分不同,其余要相同。若目标已存在,会报错。

os.renames(oldPath,newPath)

同上

   

os.mkdir(dirPath)

创建文件夹。如果文件夹已存在,会报错;如果前面的路径不存在,会报错。

os.makedirs(dirPath)

递归创建文件夹。如果前面的路径不存在,会自动创建。

   

os.listdir(dirPath)

列出该文件夹下的所有子文件夹,以列表形式返回。只列出子文件夹,不会列出文件、后代文件夹。可用于遍历。

 

 

os.chdir(dirPath)

 切换到指定目录

os.getcwd()

 获取当前目录(注意是目录)的绝对路径。

如果之前用chdir()切换了路径,此函数得到的是目标路径。

   

os.path.getsize(filePath)          

返回文件大小(字节数)

os.path.exists(path)

检测文件|文件夹是否存在,返回bool值。

这2个方法是path子模块的方法。

 

没有新建文件的方法,但可以通过打开文件来新建文件:打开文件时指定打开模式是  文件不存在时自动创建的模式,这样就能新建文件了。

path均为路径,字符串形式。

 

 

 

 

使用os模块实现文件读写

函数

描述

os.open(filePath,mode)              

打开文件,返回文件描述符(常用fd表示)。常用的mode:

  • os.O_RDONLY: 只读

  • os.O_WRONLY: 只写

  • os.O_RDWR : 读写

  • os.O_APPEND: 追加

  • os.O_CREAT: 新建然后打开

  • os.O_FSYNC : 同步写入

os.fdopen(fd, [, mode[, bufsize]]);            

此方法是内置函数open() 的别名。

mode -- 可选,和 Python 内置的 open()函数的mode参数一样,可以是r,w,a,r+,w+,a+...

bufsize -- 可选,指定返回的文件对象是否带缓冲:bufsize=0,表示没有带缓冲;bufsize=1,表示该文件对象是行缓冲的;bufsize=正数,表示使用一个指定大小的缓冲冲,单位为byte,但是这个大小不是精确的;bufsize=负数,表示使用一个系统默认大小的缓冲,缺省时使用系统默认大小的缓冲。

 

os.read(fd,n)

 fd:文件描述符,n:最多读取的字节数

返回读取到的字符串

 

os.write(fd, bytes)

写入一个字符串。返回实际写入字符串的长度。

要以字节、字节数组的形式写入。

示例:bytes("ok","utf-8")   将字符串转换为字节

os.lseek(fd, pos, how)

设置文件指针的当前位置。

第三个参数是参考点,SEEK_SET 或 0 表示文件头; SEEK_CUR或 1 表示当前位置; os.SEEK_END或2表示文件尾。

第二个参数制定相对参考点的偏移量

 os.close(fd)

 关闭文件

 

 

写入示例:

import os
fd=os.open("1.txt",os.O_RDWR)
os.write(fd,bytes("hello\nworld","utf-8"))
os.close(fd)

 

 

读取示例:

import os
fd=os.open("1.txt",os.O_RDWR)
bytes=os.read(fd,1024)  #返回的是字节形式
print(bytes.decode("utf-8"))    #解码,将读取到的字节转换为字符串
os.close(fd)

 

 

 

 

使用python的内置函数实现文件读写

使用open()函数打开文件,创建文件对象

f=open(file[, mode])

 

mode常用的值:

模式        描述

r

只读。缺省mode时默认为r。以r开头的:指针放在文件头,若文件不存在,会报错。

rb

只读,打开二进制文件。

r+

读写

rb+

读写,打开二进制文件

   

w

只写。以w开头的:指针放在文件头,如果文件不存在,会自动创建。

wb

只写,打开二进制文件

w+

读写

wb+

读写,打开二进制文件

   

a

追加。以a开头的:指针放在文件尾,如果文件不存在,会自动创建。

ab

追加,打开二进制文件

a+

追加,可读写。

ab+

追加,可读写,打开二进制文件

 

写不是先清空原有内容,再写入,而是直接覆盖。

比如原来的内容是“hello wolrd”,写入一个“ok”,变为“okllo world”。

写入的内容比原来的长,才会覆盖完。

 

 

file 对象

使用open()打开文件后,会返回一个file对象,表示文件本身。 file 对象常用的方法:

函数      描述

file.flush()

把内部缓冲区的数据立刻写入文件

file.close()

 关闭文件

   

file.read([size])

读取指定的字节数,缺省size或size为负数时,会读取所有内容。

如果是文本文件,返回读取的字符串(如果读取到的是空串,说明已到文件尾);如果是二进制文件,返回读取到的字节。

file.readline()

读取一行,以字符串(如果读取到的是空串,说明已到文件尾)或字节形式返回。

file.readlines()

读取所有行,以字符串列表或字节列表形式返回。

   

file.write(str)

 写入一个字符串,返回实际写入的字符数(注意是字符数)

file.writelines(list|tuple)        

写入一个字符串列表|元组,元素必须是字符串。

写完一个元素后,会在后面接着写,不会自动换行。如果要换行,需要自己加"\n"

   

file.tell()

返回文件指针的当前位置(从文件头开始的字节数)

file.seek(offset[, whence])    

设置文件指针的当前位置。

offset表示偏移量,int型,默认以字符为单位。

whence表示参考点,有3个可用的值:

0   文件头

1   当前位置(默认)

2    文件尾

 

读|写的时候,文件指针会自动后移。

如果以文本文件的方式打开(不带b),则读取时返回字符串|字符串列表,写入时只能写入字符串。

如果以二进制的形式打开(带b),则读取时返回字节,写入时可以写入任何类型(底层都是字节)。

 

 

读取示例:

f=open("1.txt","r+")
#str=f.read(1024)  #读指定的字节数
#str=f.readline()  #读一行
str=f.readlines()  #全读完,作为列表返回,一行一个元素
print(str)
f.close()

 

 

写入示例:

f=open("1.txt","r+")
f.write("hello")   #从头开始覆盖(不是先清空原有内容,再写入,是直接从头开始写,可能覆盖不完)
f.close()

 

 

 

 

pickle 模块

pickle模块可以实现数据的序列化和反序列化。

 

1、序列化:将数据存储到文件中

pickle.dump(对象|变量|值, 文件对象)

 

import pickle
file=open("1.txt","wb")
str="hello"
list=[1,2,3]
pickle.dump("ok",file)  
pickle.dump(str,file)  #可同时序列化多个数据
pickle.dump(1,file)  #需要以二进制形式打开文件。以文本文件形式打开,只能写入字符串类型,不能写入其他类型。
pickle.dump(list,file)
file.close()

 

 

2、反序列化:从文件中读取数据,将数据还原

x = pickle.load(文件对象)
 
import pickle
file=open("1.txt","rb")   #如果只有字符串,可以以文本文件形式打开;如果有其他类型的,就必须以二进制形式打开,否则反序列化会出错
a=pickle.load(file)  
b=pickle.load(file)
c=pickle.load(file)
d=pickle.load(file)
print(a,b,c,d)    #ok hello 1 [1, 2, 3]   反序列化的顺序和序列化的顺序一致
file.close()

 


 


所属网站分类: 技术文章 > 博客

作者:hello树先生

链接:https://www.pythonheidong.com/blog/article/6040/ee568b7873efea86acff/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)