文件操作
对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
f=open("路径/文件",'r',encoding="utf-8") .read() 文件句柄.
从头开始读。读完后状态会停留在最后一行
read(5) 读5个字符
打开文件的模式有:
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
r:只读模式
r+:读写模式(新写的东西只能追加到最后一行)
w+:写读模式 创建一个新的文件再写入。再读取。(新写的东西只能追加到最后一行)
a+:追加读写。(新写的东西只能追加到最后一行)
rb:二进制格式读(网络传输情况下会用这种模式)
wb:二进制格式写(网络传输情况下会用这种模式)
w:只写模式,会覆盖之前所有内容
a:追加内容,不会盖之前所有内容
rU:在读取时,可以将\r\n自动转换成\n(与r或r+模式同使用)主要用于不同平台系统时自动适配。
f.write("增加的内容\n")
f.close() 关闭打开文件
f.readlines() 一行一行的读,模式为r。只适合读小文件。
for i in range(500): 读前500行
print(f.readline())
for index,line in enumerate(f.readline()): 不打印第10行
if index==9
print(“--我是分割线------”)
continue
print(line.strip()) 打印并去掉空格
count=0
for line in f:
if count==9
print("--------")
count+=1
continue
print(line.strip())
count+=1
f.tell() 打印当前指针或光标的位置,按字符计数
f.seek() 指针或光标回到莫个位置,0是从头开始
f.encoding() 打印文件编码
f.fileno() 打印系统本身读文件的接口,是调系统读,不是python本身读
f.seekable() 判断文件光标或指针是否可以移动,结果true,false
f.xxxable() 判断文件xx(读,写)是否可以移动,结果true,false。xx代表读写或其他操作
f.flush() 强制刷新,将内存中的数据同步到硬盘
f.truncate() 不写参数,则会清空数据。如果参数是10.则截取10个字符(从头取)
打印进度条效果
import sys,time
for i in range(20)
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)
文件修改:
思路:打开两个文件,使用循环读旧文件,然后使用判断旧文件需要修改的字符。再写入到新文件。
#!/usr/bin/env python
f=open('wenjian.txt','r',encoding='utf-8')
fnew=open('wenjian2.txt','w',encoding='utf-8')
for line in f:
if '我是第9行' in line:
line=line.replace('我是第9行','替换测试')
fnew.write(line)
f.close()
fnew.close()
with语句:为了避免打开文件后忘记关闭,用with语句操作后悔自动关闭释放资源。
with open("wenjian.txt",'r',encoding='utf-8') as f,
open("wenjian.txt",'r',encoding='utf-8') as f: 同时打开两个文件格式。分两行,官方建议一行不要超过80字符。
f=open("wenjian.txt",'r',encoding='utf-8')
两句效果一样,只是上面的操作后会自动关闭。
#!/usr/bin/env python import sys find_str = sys.argv[1] replace_str = sys.argv[2] with open('wenjian.txt','r',encoding='utf-8') as f,\ open('wenjian2.txt','w',encoding='utf-8') as fnew: as存放打开文件的变量名,自定义 for line in f: if find_str in line: line=line.replace(find_str,replace_str) fnew.write(line)