文件处理的操作
基础语法:
f = open('打开的绝对(相对)路径文件名',mode='r',encoding='utf-8')
data = f.read()
print(data)
f.close()
## 注释
# open():打开文件
# mode='':打开文件的模式,为只读(r),只写(w),读写(r+),写读(w+),追加写入(a)
# encoding='':指定打开文件的编码,不指定的话 python3 中默认为 utf-8
# f.read():读取文件
# f.close():关闭并保存文件
python打开文件常用模式:
模式 | 描述 |
---|---|
r | 只读模式打开文件,指针在文件的开头 |
r+ | 以读写方式打开文件,对文件内容进行追加,指针在文件的开头 |
rb | 二进制模式打开只读文件,指针在为文件的开头 |
rb+ | 二进制模式打开读写的文件,指针在文件的开头 |
w | 以写入模式打开一个文件,如果文件存在,写入的数据会覆盖原,不存在则创建并写入数据 |
w+ | 以写读模式打开文件,如果文件存在,写入的数据会覆盖原,不存在则创建并写入数据 |
wb | 二进制模式打开文件,如果文件存在,写入的数据会覆盖原,不存在则创建并写入数据 |
wb+ | 二进制模式打开写读文件,如果文件存在,写入的数据会覆盖原,不存在则创建并写入数据 |
a | 追加模式写入数据到文件,指针在文件的末端 |
ab | 追加写入二进制数据到文件,指针在文件的末端 |
a+ | 二进制打开文件,可追加写入二进制数据 |
只读,读写,二进制只读及读写模式
只读模式打开一个文件,指针默认是在开头
f = open('python.txt', mode='r', encoding='utf-8')
data = f.read()
print(data)
f.close()
# 输出结果
人生苦短,我用python
读写模式 r+ 打开文件用于读写
f = open('python.txt', mode='r+', encoding='utf-8')
data = f.read() # 打开文件并赋值给 data
print(data)
f.write('\n我要学Python') # 写入数据
f.close() # 关闭文件
# 输出结果
人生苦短,我用Python
# 再次打开可以看到已有写入的数据
f = open('python.txt', mode='r+', encoding='utf-8')
data = f.read()
print(data)
f.close()
# 输出结果
人生苦短,我用Python
我要学Python
二进制打开只读模式文件
f = open('python.txt', mode='rb') # mode后为模式,rb为二进制查看
print(f.read())
# 输出结果
b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad,\xe6\x88\x91\xe7\x94\xa8Python\n\xe6\x88\x91\xe8\xa6\x81\xe5\xad\xa6Python'
只写,写读模式
以只写模式打开文件
f = open('python.txt', mode='w')
f.write('Python是世界上最好的语言') # 只写模式下写入数据会直接将源文件内容覆盖
f.close()
f = open('python.txt', mode='r')
print(f.read())
f.close()
# 输出结果
Python是世界上最好的语言
以写读模式打开文件
f = open('python.txt', mode='w+')
f.write('我要学习Python')
print('定位当前光标位置 %s' % (f.tell()))
f.seek(0) # 因为w+读取文件之后会定位到结尾,需要重新定位光标到开头
f.flush() # 刷新文件使内存数据保存到硬盘
print('重新定位后的光标位置 %s' % (f.tell()))
data = f.read()
print(data)
f.close()
# 输出结果
定位当前光标位置 18
重新定位后的光标位置 0
我要学习Python
追加模式写入数据到文件
只追加模式写入数据
f = open('python.txt', mode='a')
f.write('\n人生苦短,我用Python')
f.close()
f = open('python.txt', mode='r')
print(f.read())
f.close()
# 输出结果
我要学习Python
人生苦短,我用Python
以追加读模式写入数据到文件
f = open('python.txt', mode='a+')
f.write('\n人生苦短,我用Python')
f.seek(0)
f.flush()
print(f.read())
f.close()
# 输出结果
我要学习Python
人生苦短,我用Python
人生苦短,我用Python
文件操作的其他方法
方法 | 描述 |
---|---|
file.close() | 关闭文件,关闭文件后不再进行读写操作 |
file.flush() | 把文件中内存buffer中强制刷新到硬盘里 |
file.fileno() | 返回文件句柄在内核中的索引值,做IO多路复用可以用到 |
file.readable() | 判断文件是否可读,在linux中一些设备的文件是不可读的 |
file.readline() | 只读一行,遇到 \r or \n 为止 |
file.seek() | 把文件的指针移到指定位置,seek 的长度是按照字节来算的,不同的字符编码每个字符所占的长度不一样 |
file.seekable | 判断文件是否可进行 seek 操作 |
file.tell() | 返回当前文件操作指针位置 |
file.truncate() | 按指定长度截取文件,指定长度的话,从文件的开头开始截取到指定长度,不指定长度,就从当前位置到文件尾部的内容全部截取 |
file.writable() | 判断文件是否可写 |
实例
- fileno() 方法返回一个整型的文件描述符
f = open('python.txt', mode='a+')
fid = f.fileno()
print('文件描述符为:', fid)
f.close()
# 输出结果
文件描述符为: 3
- readline() 用于读取文件整行,包括 \n 字符
f = open('python.txt', mode='r+')
print(f.readline())
print('当前光标的位置:', f.tell())
f.close()
# 输出结果
我要学习Python
当前光标的位置: 19
- truncate() 截取文件
f = open('python.txt', mode='r+') # 默认编码 utf-8
f.truncate(10) # 截取 10 个字节
data = f.read()
print("读取数据:%s" %data)
f.close()
# 输出结果
读取数据:我要学P