python基础——file操作

读取文件

在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
昨夜,寒

将文件写入磁盘

file.write(str)

将字符串写入文件,返回的是写入的字符长度。

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)

结果:
同上,尾部没有添加内容

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值