f=open('test.txt','w',encoding='utf8')f.write('hello\n')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())#由于读光标的原因,它不会重头再readf.close()
hello2hello
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))#一个中文占三个字符,光标的位置走6print(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个,截断,文件中显示hellof.close()
文件模式:
r+:读写模式,读正常,写的时候在最后写,但写了之后光标移动到最后,想要再读需要移动光标
w+:写读模式,写在最开始写,会覆盖原来的内容,想要读的时候要移动光标,基本上不用
a+:光标一开始在最后,读写都是在最后,不会覆盖
文件拷贝以及修改:
number=0f1=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\n'])) 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)