Python 文件操作主要包括打开文件、读文件、写文件、修改文件、关闭文件等操作,还会写一些基本操作方法。
打开文件 - open()
在 python,使用 open 函数,可以打开一个已经存在的文件,或者创建一个新文件
open(文件名,访问模式)
示例如下:
1 | f = open('test.txt', 'w') |
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
关闭文件 - close()
1 | # 新建一个文件,文件名为test.txt |
写文件 - write()
1 | 'text.txt', 'w') f = open( |
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
读文件 - read()
使用 read(num)
可以从文件中读取数据,num
表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num ,那么就表示读取文件中所有的数据。
1 | 'text.txt', 'r') f = open( |
读数据 - readlines()
readlines 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。1
2
3
4'text.txt', 'r') f = open(
result = f.readlines()
result
['hello!\n', 'world\n', 'haha\n']
读数据 - readline()
1 | 'text.txt', 'r') f = open( |
处理大文件
一般的读取,readlines()、read() 等会将整个文件加载到内存中。在文件较大时,往往会引发 MemoryError
(内存溢出)。本人试了用 readlines() 读取一个 2G 大小的日志文件,结果本子直接跑挂。
处理方法一般有以下几种:
逐行读取
1 | while True: |
使用 with 结构
with 语句句柄负责打开和关闭文件(包括在内部块中引发异常时),for line in f 对可迭代对象 f 进行迭代遍历,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。
这也是较为推荐使用的方法。
1 | with open(filename, 'rb') as f: |
文件的随机读写
获取当前读写的位置 - tell()
在读写文件的过程中,如果想知道当前的位置,可以使用 tell() 来获取。
1 | '/mnt/d/download/catalina.out','r') f = open( |
定位到某个位置 - seek()
如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用 seek()。
seek(offset, from)
:
- offset - 偏移量
- from - 方向
- 0 - 表示文件开头
- 1 - 表示当前位置
- 2 - 表示文件末尾
1 | '/mnt/d/download/catalina.out','r') f = open( |
文件重命名 - os.rename('srcFile', 'destFile')
os 模块中的 rename()
可以完成对文件的重命名操作
删除文件 - os.remove('fileName')
文件夹的相关操作
- 创建文件夹 -
os.mkdir('dirName')
- 获取当前目录 -
os.getcwd()
- 改变目录 -
os.chdir('../')
- 获取目录列表 -
os.listdir('./')
- 删除文件夹 -
os.rmdir('dirName')
,不能删除非空目录
1 | os.getcwd() |