本文简要总结了Python中文件的处理及其一些文件函数的使用方法。
以下列出了Python中文件的打开和关闭的用法
打开文件
f=open(path,flag[ , encoding][ , errors])
path:要打开文件的路径
flag:打开方式
encoding:编码方式
errors:错误处理
打开方式(flag:)
- r:以只读方式打开文件,文件的描述符放在文件的开头
- rb:以二进制格式打开一个文件,用于只读,文件的描述符放在文件的开头
- r+:打开一个文件用于读写,文件的描述符放在文件的开头
- w:打开一个文件,只用于写入,若文件存在,将原先的内容覆盖;若文件不存在,则创建一个新文件。
- wb:打开一个文件用于写入二进制,若文件存在,将原先的内容覆盖;若文件不存在,则创建一个新文件。
- w+:打开一个文件用于读写,若文件存在,将原先的内容覆盖;若文件不存在,则创建一个新文件。
- a:打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾
- a+:打开一个文件用于追加,如果文件存在,文件描述符将会放到文件末尾
关闭文件
f . close()
读文件
以下列出了Python中一些文件函数的使用方法及其相应的功能。
- 读取文件全部内容
str1=f . read()
print(str1) - 读取指定字符串
str2=f . read(10)
print(str2) - 读取整行,包括“\n”字符
str3= f . readline()
print(str3) - 读取所有行并返回列表
list1=f . readlines()
print(list1)
若给定的数字大于0,返回实际size字节的行数
list1=f . readlines(25)
print(list1) - 修改描述符的位置
f . seek(0) - 自动关闭读文件
with open(path,“r”,encoding=“utf-8”)as f2:
print(f2 . read()) - 手动关闭读文件
try:
f1=open(path,“r”,encoding=“utf-8”)
print(f1 . read())
finally:
if f1:
f1 . close()
设路径(E:\Python test\filetext.txt)中的内容为:
abcdefghijklmnopqrstuvw
xyz
abcdefghijklmnopqrstuvw
xyz
abcdefghijklmnopqrstuvw
xyz
相应的代码如下:
path=r"E:\Python test\filetext.txt"
f=open(path,"r")
#读取文件全部内容
str1 = f.read()
print(str1)
#修改描述符的位置
f . seek(0)
#读取指定字符串
str2=f . read(10)
print(str2)
#修改描述符的位置
f . seek(0)
#读取整行,包括“\n”字符
str3= f . readline()
print(str3)
#修改描述符的位置
f . seek(0)
#读取所有行并返回列表
list1=f . readlines()
print(list1)
#修改描述符的位置
f . seek(0)
#若给定的数字大于0,返回实际size字节的行数
list1=f . readlines(25)
print(list1)
以上代码的运行结果为:
abcdefghijklmnopqrstuvw
xyz
abcdefghijklmnopqrstuvw
xyz
abcdefghijklmnopqrstuvw
xyz
abcdefghij
abcdefghijklmnopqrstuvw
['abcdefghijklmnopqrstuvw\n', 'xyz\n', 'abcdefghijklmnopqrstuvw\n', 'xyz\n', 'abcdefghijklmnopqrstuvw\n', 'xyz']
['abcdefghijklmnopqrstuvw\n', 'xyz\n']
写文件(将信息写入缓冲区)
- 手动关闭文件
f=open(path,“w”)
f . write(“write a information”)
f.close()
- 刷新缓冲区
f . flush()(直接把内部缓冲区的数据立刻写入文件,而不是被动的等待自动刷新缓冲区写入)
编码
- 对字符串进行编码:(二进制一定要编码解码)
with open(path,“wb”)as f1:
str=“write a information”
f1 . write(str . encode(“utf-8”))
- 对字符串进行解码:
with open(path,“rb”)as f2:
data=f2 . read()
print(data)
newData=data . decode(“utf-8”)
print(newData)
设E:\Python test\filewrite.txt是个空文件
path=r"E:\Python test\filewrite.txt"
#对字符串进行编码:(二进制一定要编码解码)
with open(path,"wb")as f1:
str="write a information"
f1 . write(str . encode("utf-8"))
with open(path,"rb")as f2:
data=f2 . read()
print(data)
newData=data . decode("utf-8")
print(newData)
以上代码的运行结果为:
b'write a information'
write a information
一个完整的编码解码过程
import pickle (数据持久性模块)
myList=[1,2,3,4,5,“write a infromation”]
f=open(path,“wb”)
pickle . dump(myList,f)
f . close()
读取:
f1=open(path,“rb”)
tempList=pickle . load(f1)
print(tempList)
f1 . close()
path=r"E:\Python test\filewrite.txt"
#数据持久性模块
import pickle
#列表、元组别
myList=[1,2,3,4,5,"write a infromation"]
f=open(path,"wb")
pickle . dump(myList,f)
f . close()
#读取
f1=open(path,"rb")
tempList=pickle . load(f1)
print(tempList)
f1 . close()
以上代码的运行结果为:
[1, 2, 3, 4, 5, 'write a infromation']
运行后,文件中保存的是经过编码的数据,运行结果是解码后的数据。