f=open('test.txt','w',encoding='utf8') f.write('hello ') f.close() f=open('test.txt','a') f.write('2hello') f.close() f=open('test.txt','r') print(f.read(1)) print(f.readline())#读到回车,再加上print的回车,一共两个回车 print(f.read())#由于读光标的原因,它不会重头再read f.close()
h ello 2hello
f=open('test.txt','r',encoding='utf-8') for i in f.readlines():#f.readlines一行一行读取的集合 print(i.strip())#去掉每行的回车,否则会与print自带的回车重复,换两行 f.close()
以上方法不常用
f=open('1.txt','r',encoding='utf8') for i in f: print(i.strip()) #常用 f.close()
f=open('1.txt','r',encoding='utf8') print(f.tell())#找光标的位置 print(f.read(2))#一个中文占三个字符,光标的位置走6 print(f.tell()) f.seek(3)#将光标移到第一个中文后,写不是3的倍数读取中文时会报错 print(f.read(3)) f.close()
0 君不 6 不见,
报错:
flush的作用:
import sys,time #下面会一次性出现30个*,因为是写在缓冲区的,写好后一次性显示出来 for i in range(30): sys.stdout.write("*") time.sleep(0.2) #下面类似进度条的效果,因为flush能将缓冲区的东西马上显示出来 for i in range(30): sys.stdout.write("*") sys.stdout.flush() time.sleep(0.2)
#以上sys.stdout可以使用print('*',end='',flush='True')替换
truncate截断方法:
f=open('1.txt','w',encoding='utf8') f.write('helloworld') f.truncate(5)#只保留前5个,截断,文件中显示hello f.close()
文件模式:
r+:读写模式,读正常,写的时候在最后写,但写了之后光标移动到最后,想要再读需要移动光标
w+:写读模式,写在最开始写,会覆盖原来的内容,想要读的时候要移动光标,基本上不用
a+:光标一开始在最后,读写都是在最后,不会覆盖
文件拷贝以及修改:
number=0 f1=open('1.txt','r',encoding='utf8') f2=open('2.txt','w',encoding='utf8') for line in f1: number+=1 if number==2: f2.write(''.join([line.strip(),' I like this sentence '])) else: f2.write(line) f1.close() f2.close()
以下代码能实现同样功能:(用 with 同时管理多个文件对象,with a as b 相当于 b=a)
with open('1.txt','r',encoding='utf8') as f1,open('2.txt','w',encoding='utf8')as f2: for line in f1.readlines(): f2.write(line)