读取文件
在py文件的当前目录,创建如下文件“小重山”
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
被惊醒,已三更。站起身,
独绕台阶踽踽行。四周静悄悄,
帘外,一轮淡月正朦胧。
为国建功留青史,未老满头霜星星。
家山松竹苍然老,无奈议和声起、阻断了归程。
想把满腹心事,付与瑶琴弹一曲。
可高山流水知音稀,纵然弦弹断,又有谁来听
data =open('小重山','r',encoding= 'utf8').read() #读取文件
print(data) # r为读,read为方法
结果:
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
被惊醒,已三更。站起身,
独绕台阶踽踽行。四周静悄悄,
帘外,一轮淡月正朦胧。
为国建功留青史,未老满头霜星星。
家山松竹苍然老,无奈议和声起、阻断了归程。
想把满腹心事,付与瑶琴弹一曲。
可高山流水知音稀,纵然弦弹断,又有谁来听
f = open('小重山','r',encoding= 'utf8') #读取文件
data =f.read(5) # 读取5个字符
print(data)
f.close() # 读完后养成习惯,关闭文件
结果:
昨夜,寒秋
f = open('小重山','r',encoding= 'utf8')
print(f.readline()) # file.readline([size])读取整行,包括 "\n" 字符。
print(f.readline())
f.close()
结果:
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
f = open('小重山','r',encoding= 'utf8')
print(f.readlines()) # file.readlines([sizeint])读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
for i in f.readlines():
print(i.strip())
结果:
['昨夜,寒秋蟋蟀不住哀鸣,\n', '梦回故乡,千里燃战火,\n', '被惊醒,已三更。站起身,\n', '独绕台阶踽踽行。四周静悄悄,\n', '帘外,一轮淡月正朦胧。\n', '为国建功留青史,未老满头霜星星。\n', '家山松竹苍然老,无奈议和声起、阻断了归程。\n', '想把满腹心事,付与瑶琴弹一曲。\n', '可高山流水知音稀,纵然弦弹断,又有谁来听hello world \n', 'add']
格式化写文件
创建如下文件"小重山2"
帘外,一轮淡月正朦胧。
为国建功留青史,未老满头霜星星。
家山松竹苍然老,无奈议和声起、阻断了归程。
想把满腹心事,付与瑶琴弹一曲。
执行下列程序
f = open('小重山2','w',encoding= 'utf8') #格式化写文件
f.write('hello world \n') # \n 为换行;w 为写,write为方法
f.write('joy')
f.close()
文件结果如下:(注:不是打印结果)
hello world # 会将之前的内容清空,重新写入
joy
追加
a:打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
import time
f = open('小重山','a',encoding= 'utf8') #写文件。使用a语法进行追加
f.write('hello world \n')
f.write('add joy')
time.sleep(20)
f.close()
结果:
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
被惊醒,已三更。站起身,
独绕台阶踽踽行。四周静悄悄,
帘外,一轮淡月正朦胧。
为国建功留青史,未老满头霜星星。
家山松竹苍然老,无奈议和声起、阻断了归程。
想把满腹心事,付与瑶琴弹一曲。
可高山流水知音稀,纵然弦弹断,又有谁来听hello world
add #hello world add 为追加写入
在指定行中添加内容
number = 0
f = open('小重山','r',encoding= 'utf8')
for i in f.readlines():
number +=1
if number == 6: # 在第6行中添加内容
# print(i.strip(),'zizyg')
# else:
# print(i.strip())
i = ''.join([i.strip(),'aaaa'])
print(i.strip())
结果:
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
被惊醒,已三更。站起身,
独绕台阶踽踽行。四周静悄悄,
帘外,一轮淡月正朦胧。
为国建功留青史,未老满头霜星星。aaaa #r只是读取文件,aaaa字符不会存入到文件中
家山松竹苍然老,无奈议和声起、阻断了归程。
想把满腹心事,付与瑶琴弹一曲。
可高山流水知音稀,纵然弦弹断,又有谁来听hello world
add
#使用迭代器方式,结果同上
f = open('小重山','r',encoding= 'utf8')
number = 0
for i in f: # for内部将f对象做成迭代器,用一行取一行
number += 1
if number == 6:
i = ''.join([i.strip(),'aaaa'])
print(i.strip())
查看光标位置、设置光标位置
print(f.tell())
print(f.read(2))
print(f.tell()) # 读光标位置
f.seek(0) # 设置光标位置
print(f.read(4))
结果:
0
昨夜
6 #一个中文字符占6个位置,所以是6
昨夜,寒
将文件写入磁盘
将字符串写入文件,返回的是写入的字符长度。
xie = open('存储','w',encoding= 'utf8')
xie.write('sjanglkllgm 77')
xie.flush() # 将数据存储到磁盘
import sys,time
for i in range(100):
# print('*',end='',flush=True)
sys.stdout.write('*') #使用*号代替进度条
sys.stdout.flush()
time.sleep(0.01) #打印*号间隔时长
结果:
会创建一个名称为“存储”的文件,同时写入一下内容
sjanglkllgm 77
打印*号100个
清除、判断是否为终端
x =open('小重山','a',encoding= 'utf8')
x.truncate(20) # 清除后剩下20个字符
x.close()
结果:
清除说有文字,留下20个字符
昨夜,寒秋蟋蟀不住哀
x =open('小重山','a',encoding= 'utf8')
print(f.isatty()) # 判断是否为终端
结果:
Flase
读与写
(r+打开一个文件用于读写。文件指针将会放在文件的开头。)
# r+模式
b = open('小重山','r+',encoding = 'utf8')
print(b.readline())
b.write('读与写')
b.close()
结果:
昨夜,寒秋蟋蟀不住哀鸣, # 只会读取第一行内容,如需要读取全部,使用迭代器
在最后一行结尾会写入‘读与写’,文件内容如下:
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
被惊醒,已三更。站起身,
独绕台阶踽踽行。四周静悄悄,
帘外,一轮淡月正朦胧。读与写
w+模式
打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
#w+模式
b = open('小重山','w+',encoding = 'utf8') # 执行时会清空所有内容
print(b.readline()) # 执行后结果为空行
b.write('写模式')
print(b.tell()) #返回文件位置
b.seek(0) #将光标调整位置,如注释此条,打印为空
print(b.readline())
b.close()
结果:
# 执行时被清空,所以这个会有一个空行
9
写模式
a+模式
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
b = open('小重山','a+',encoding = 'utf8')
print(b.tell())
b.write('写模式')
print(b.tell())
#b.seek(0)
print(b.readline())
b.close()
结果:
188
197 #文件光标位置
在文件尾部写入‘写模式’如下:
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
被惊醒,已三更。站起身,
独绕台阶踽踽行。四周静悄悄,
帘外,一轮淡月正朦胧。写模式
重写文件
#创建‘小重山3’的文件,将‘小重山’的内容写入到‘小重山3’的文件中
g = open('小重山', 'r', encoding='utf8')
h = open('小重山3', 'w', encoding='utf8')
number=0
for line in g:
number+=1
if number ==3:
line=''.join([line.strip(),'尾部添加\n'])
# line = '测试重写模式\n'
h.write(line)
f.close()
结果:
写入的文件内容如下:
昨夜,寒秋蟋蟀不住哀鸣,
梦回故乡,千里燃战火,
被惊醒,已三更。站起身,尾部添加
独绕台阶踽踽行。四周静悄悄,
帘外,一轮淡月正朦胧。
另一种写法
ith 同时管理多个文件对象
with open('小重山','r',encoding='utf8') as f,open('小重山3','w',encoding='utf8') as g: # 程序跑完缩进里面的内容自动close
for line in f:
g.write(line)
结果:
同上,尾部没有添加内容