2.29 操作文件
1. 找到文件 打开
2. 读, 修改
3. 保存 关闭
1. f.open(filename)
2. f.read(50) 只读50个..
f.read() 不写数字就读所有,
f.write(YOURDATA)
3. f.close()
----------------
文件打开模式 只能以一种方式
python比较变态,只能以读、创建、追加 3种模式中的任意一种打开文件,不能即写又读。
操作模式
r 只读模式
w 创建模式,若文件已存在,则覆盖旧文件
a 追加模式,新数据会写到文件末尾
创建文件
f = open(file='D:/工作日常/staff.txt',mode='w')
f.write("Alex CEO 600\n")
f.write("黑姑娘 行政 5000\n")
f.close()
只读模式
f = open(file='兼职白领学生空姐模特护士联系方式.txt',mode='r')
print(f.readline()) # 读一行
print('------分隔符-------')
data = f.read() # 读所有,剩下的所有
print(data)
f.close()
追加模式
f = open(file='兼职白领学生空姐模特护士联系方式.txt',mode='a')
f.write("黑姑娘 北京 168 48\n") # 会追加到文件尾部
f.close()
循环文件
f = open(file='兼职白领学生空姐模特护士联系方式.txt',mode='r')
for line in f:
line = line.split() split不添加参数默认是空格分隔, 分隔后每行是一个列表
name,addr,height,weight,phone = line
height = int(height)
weight = int(weight)
if height > 170 and weight <= 50:
print(line)
f.close()
f.seek() 走多少个字节.. ,如果是英文,每次1个, 如果是中文 每个汉字3个字节
f.flush() 强制刷到硬盘 为什么要强制刷新到硬盘,是因为 文件写入不是马上到硬盘的,都是临时存在
内存, 如果断电,就gg... 所以有了flush,而且还不需要f.close. 就可以直接到硬盘了.正常是f.close之后
才到硬盘
f.tell() 返回光标的位置
f.truncate(100) 从0截断到100 如果里面不写数字,就从光标的位置到末尾 全部去掉
举例
f = open('空姐联系方式.txt','a',encoding='utf-8')
f.seek(9)
print(f.tell())
f.truncate()
f.truncate() 如果不写数字,就从光标的位置9到末尾 全部没了
如果写了数字,这个时候又有seek,那么, seek失效,直接从0开始,从头开始截断到数字位置
-----------------------------
读
f.read 一次性读完, 读完是个str
f.readline 一次读一行 读完是个str
f.readlines 一次性读完所有行,,返回的是列表
-----------------------
2.33 混合模式下处理文件
w+ 写读 , 这个功能基本没什么意义,它会创建一个新文件 ,写一段内容,可以再把写的内容读出来,没什么卵用。
r+ 读写,能读能写,但都是写在文件最后,跟追加一样,, 不会覆盖源文件, 往后添加
a+ 追加读,文件 一打开时光标会在文件尾部,写的数据全会是追加的形式
以上3种 都不常用
--------------
修改文件 r+
f = open('空姐联系方式.txt','r+',encoding='utf-8')
f.seek(6)
f.write("你好")
我想你好456789 123456你好你好你好
我想请123456789 123456你好你好你好
以上2行内容本来意义,执行代码后偏移6个字节,后,请123,变成了你好. 你好占了6个字节,所以 请123被吃掉了
---------------