Python文件操作
创建和打开文件
普通打开方式
在Python中想要操作文件需要先创建或者打开指定的文件并创建文件对象,可以通过内置的open()函数实现。
file = open(FileName, mode , buffering)
- file:被创建的文件对象
- FileName:打开的文件及路径
- mode:可选参数,用于指定打开文件的模式(默认打开模式为
r(只读)) - buffering:可选参数,用于指定文件的缓冲模式,值为0表达式不缓存,值为1表示缓存,如果大于1,则表示缓冲区的大小,默认为缓存模式(一般不用管)。
mode参数的各种对应模式及说明
| 打开模式 | 说明 | 注意 |
|---|---|---|
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 | 文件必须存在 |
| rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 | 文件必须存在 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 | 文件必须存在 |
| rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 | 文件必须存在 |
| w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 | 文件存在,则将其覆盖,否则创建新文件 |
| wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 | 文件存在,则将其覆盖,否则创建新文件 |
| w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 | 文件存在,则将其覆盖,否则创建新文件 |
| wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 | 文件存在,则将其覆盖,否则创建新文件 |
| a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 | 文件存在,则追加,否则创建新文件 |
| ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 | 文件存在,则追加,否则创建新文件 |
| a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 | 文件存在,则追加,否则创建新文件 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 | 文件存在,则追加,否则创建新文件 |
示例代码:
在D盘创建a.txt内容如下:
1
2
3
file = open('D:\\a.txt', 'r')
for i in file:
print(i)
file.close()
执行结果:
1
2
3
注意:文件使用完毕后一定要进行关闭
打开文件时指定编码方式
在使用open()函数打开文件时,默认采用GBK编码,当被打开的文件不是GBK时,将会抛出UnicodeDecodeError异常,解决方法如下:
file = open('D:\\a.txt', 'r',encoding='utf-8')
使用with语句打开文件
打开文件后,要及时将其关闭,如果忘记关闭可能带来意想不到的问题,另外,如果在打开文件时抛出了异常,那么将导致文件不能被及时关闭。为了更好的避免此类问题发生,可以使用Python提供的with语句,从而实现在处理时,无论是否抛出异常,都能保证with语句执行完毕后关闭已经打开的文件。
with open(file) as target:
with-body
- file:打开的文件及路径
- target:用于指定一个变量,并且将打开的文件内容保存到该变量
- with-body:用于指定with语句体,其中可以是执行with语句后相关的操作语句
示例代码:
with open('D:\\a.txt', 'r') as file:
value = file.read() # 读取整个文件内容
print(value)
执行结果:
1
2
3
写入文件内容
写入txt文件
file.write(string)
- file:为打开的文件对象
- string:为要写入的字符串
方式1:
lists = ("今天的排程:", "1-起床", "2-吃早餐", "3-爬山")
with open('D:\\a.txt', 'a') as file: # 创建文件并追加写入
for i in range(len(lists)):
value = file.write(lists[i]+'\n')
打开a.txt
今天的排程:
1-起床
2-吃早餐
3-爬山
方式2:
file = open('D:\\a.txt', 'a')
for i in range(len(lists)):
value = file.write(lists[i]+'\n')
file.close()
打开a.txt
今天的排程:
1-起床
2-吃早餐
3-爬山
注意: 在方式2时,一定要调用close()方法关闭文件,否则写入的内容不会保存到文件夹中。这是因为当我们写入文件内容时,操作系统不会立刻把数据写入磁盘,而是先缓存起来,只有调用close()方法时,操作系统才会保证把没有写入的数据全部写入磁盘。
| 模式 | 实现方式 |
|---|---|
| w(写入) | 先清空原文件中的内容,再写入新的内容 |
| a(追加) | 在文件追加内容 |
写入csv文件
import csv
value = ['one', 'two', 'three']
def csv_a(va):
with open('d:/a.csv', 'a', newline='') as file: # 有newline二次写入时不会有空行
write = csv.writer(file) # 实例化
try:
write.writerow(va) # 每次写入一行
except Exception as e:
print('写入CSV异常:', e)
csv_a(value)
读取文件
file.read(size)
- file:为打开的文件对象
- size:可选参数,用于指定要读取的字符个数,如果省略,则一次性读取所有内容
读取上面的a.txt
with open('D:\\a.txt', 'r') as file2:
value = file2.read(12) # 打开前12个字符
print(value)
执行结果:
今天的排程:
1-起床
注意:
\n(换行也算两个字符))- 文件必须为打开模式(r 或 r+)
从指定位置读取文件
使用seek()
file.seek(offset, whence)
- file:表示已打开的文件对象
- offset:用于指定移动的字符个数
- whence:用于指定从什么位置开始计算(0表示从文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认为0)
示例代码:
a.txt内容如下
1234567891011121314151617181920212223242526272829
从第19位开始读取,读取10个字符。
with open('D:\\a.txt', 'r') as file2:
file2.seek(19) # 从文件头到第19个字符开始读取
value = file2.read(10) # 读取10个字符,文件必须为打开模式:r或r+
print(value)
执行结果:
1516171819
读取一行
file.readline()
a.txt内容
今天的排程:
1-起床
2-吃早餐
3-爬山
示例代码:
with open('D:\\a.txt', 'r') as file2:
value = file2.readline() # 读取10个字符,文件必须为打开模式:r或r+
print(value)
执行结果:
今天的排程:
跳过第一行
读取全部行
file.readlines()
readlines()和read()不指定size类似,只不过readlines()返回的是一个字符串列表。
a.txt内容
今天的排程:
1-起床
2-吃早餐
3-爬山
示例代码:
with open('D:\\a.txt', 'r') as file2:
value = file2.readlines() # 读取10个字符,文件必须为打开模式:r或r+
print(value)
执行结果:
['今天的排程:\n', '1-起床\n', '2-吃早餐\n', '3-爬山\n']

浙公网安备 33010602011771号