目录
文本文件
1.open()内置函数--必须加close操作保存文件
(1)语法
open(file, mode='r', buffering=-1, encoding=None, errors=None,newline=None, closefd=True, opener=None)
(2)参数
🧡file参数:指定了被打开的文件名称,为一个字符串。
💛mode参数:指定了文件打开模式,默认文件访问模式为"r"。
💚buffering参数:指定了读写文件的缓存模式。0表示不缓存,1表示缓存,如大于1则表示缓冲区的大小,如取负值则表示缓存模式是默认值。
💙encoding参数:指定对文本进行编码和解码的方式,只适用于文本模式,可以使用Python支持的任何格式,如GBK、utf-8、CP736等等。
(3)文件打开模式
模式 | 说明 |
---|---|
r | 读模式(默认模式,可省略),如果文件不存在,则抛出异常 。指针位置默认开头。 |
w | 写模式,如果文件已存在,先清空原有内容再进行编辑。如果不存在,则创建新文件。指针位置默认开头。 |
x | 写模式,创建新文件,如果文件已存在则抛出异常 |
a | 追加模式,不覆盖文件中原有内容 ,指针位置默认末尾。 |
b | 二进制模式(可与其他模式组合使用) |
t | 文本模式(默认模式,可省略) |
+ | 读、写模式(可与其他模式组合使用) |
(4)文件对象属性与常用方法
方法 | 功能说明 |
---|---|
close() | 把缓冲区的内容写入文件,同时关闭文件,并释放文件对象 |
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
read([size]) | 从文本文件中读取size个字符(Python 3.x)的内容作为结果返回,或从二进制文件中读取指定数量的字节并返回,如果省略size则表示读取所有内容 。注意指针的位置,即开始读取的位置。 |
readline() | 从文本文件中读取一行内容作为结果返回,返回的是一个字符串。 |
readlines() | 把文本文件中的每行文本作为一个字符串存入列表中,返回该列表。 |
seek(offset[, whence]) | 把文件指针移动到新的字节位置,offset表示相对于whence的位置。whence为0表示从文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认为0。 |
tell() | 返回文件指针的当前位置。文件从头开始的当前位置为0,下一个位置为1,依次加1 。 |
write(s) | 把s的内容写入文件 ,注意写入的位置是从指针开始的位置写入。返回的是写入s的长度。 |
writelines(s) | 把字符串序列写入文本文件,不添加换行符,返回的是None 。 |
(5)举例
txt文本原来的内容(例1-6):
注意光标的位置
例1:
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
file.seek(0)
file.write("ok")
print(file.read())
file.close()
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
file.write("ok")
print(file.read())
file.close()
2种方式运行结果都为如下:
2323
545353535
3434
1324343434
2424
535553
2种方式的1.txt修改后的内容都为如下:
例2:
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
print(file.read())
file.write("ok")
file.close()
运行结果:
132323
545353535
3434
1324343434
2424
535553
1.txt修改后的内容:
例3:
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
file.seek(8)
file.write("ok")
print(file.read())
file.close()
运行结果(注意空格也算一个位置):
353535
3434
1324343434
2424
535553
1.txt修改后的内容:
例4:
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
print(file.seek(8))
print(file.readlines())
print(file.tell())
file.close()
运行结果:
8
['545353535\n', '3434\n', '1324343434\n', '2424\n', '535553']
49
例5:
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
print(file.read())
file.write("\nok")
file.close()
运行结果:
2323
545353535
3434
1324343434
2424
535553
1.txt修改后的内容:
例6:
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
lst=["mjq"]
file.seek(2)
print(file.writelines(lst))
file.close()
运行结果:
None
1.txt修改后的内容:
txt文本原来的内容(例7):
注意光标的位置
例7:
file=open(r"F:/资料/1.txt","r+",encoding="GBK")
print(file.read())
file.write("ok")
file.close()
运行结果:
132323
545353535
3434
1324343434
2424
535553
1.txt修改后的内容:
2.上下文管理语句with
(1)语法
with open(file, mode, encoding) as fp:
(2)参数
🧡file参数:指定了被打开的文件名称,为一个字符串。
💛mode参数:指定了文件打开模式,默认文件访问模式为"r"。
💚encoding参数:指定对文本进行编码和解码的方式,只适用于文本模式,可以使用Python支持的任何格式,如GBK、utf-8、CP736等等。
(3)举例
例1:遍历并输出文本文件的所有行内容
with open(r"F:\资料\1.txt",'r') as file:
for line in file:
print(line)
运行结果:
132323
545353535
3434
1324343434
2424
535553
例2:假设文件data.txt中有若干整数,所有整数之间使用英文逗号分隔,编写程序读取所有整数,将其按升序排序后再写入文本文件data_asc.txt中
with open(r"F:\资料\2.txt",'r') as file:
for data in file:
data=data.split(",")
print(data)
data=[int(item) for item in data]
data.sort(reverse=True)
print(data)
data=[str(item)+'\n' for item in data]
with open(r"F:\资料\3.txt",'w')as file:
file.writelines(data)
运行结果:
['12', '6', '3', '7', '65', '43', '35', '67', '8', '98', '8', '9', '5']
[98, 67, 65, 43, 35, 12, 9, 8, 8, 7, 6, 5, 3]
2.txt内容:
3.txt内容:
例3:统计文本文件中最长行的长度和该行的内容。
result=[0,'']
with open(r"F:\资料\1.txt",'r') as file:
for line in file:
print(line)
t=len(line)
print(t)
if t>result[0]:
result=[t,line]
print(result)
运行结果:
[11, '1324343434\n']