〖Python〗-- 文件处理
【文件处理】
一、文件处理流程
1、打开文件,得到文件句柄并赋值给一个变量
2、通过句柄对文件进行操作
3、关闭文件
# 创建了一个 周杰伦.txt 文件,用open函数打开这个文件,因为存的时候用pycharm的默认编码utf8去存,解码的时候时按照操作系统的编码(windows是GBK)去解码,所以用什么编码存就用什么编码去解码 f = open("周杰伦.txt", encoding="utf8") # 打开 data = f.read() # 读文件 print(data) # 查看 f.close() # 关闭文件 输出 听妈妈的话 词:周杰伦 曲:周杰伦 编曲:林迈可 洪敬饶 制作人:周杰伦 和声编写:周杰伦 和声:周杰伦 录音室:阿尔发录音室 歌词录入:Hybert Kwok 小朋友 你是否有很多问号 为什么 别人在那看漫画 我却在学画画 对着钢琴说话 别人在玩游戏 我却靠在墙壁背我的ABC 我说我要一台大大的飞机 但却得到一台旧旧录音机 为什么要听妈妈的话 长大后你就会开始懂了这段话 哼 长大后我开始明白 为什么我 跑得比别人快 飞得比别人高 将来大家看的都是我画的漫画 大家唱的都是 我写的歌 妈妈的辛苦 不让你看见 温暖的食谱在她心里面 有空就多多握握她的手 把手牵着一起梦游 听妈妈的话 别让她受伤 想快快长大 才能保护她 美丽的白发 幸福中发芽 天使的魔法 温暖中慈祥 在你的未来 音乐是你的王牌 拿王牌谈个恋爱 唉!我不想把你教坏 还是听妈妈的话吧 晚点再恋爱吧 我知道你未来的路 但妈比我更清楚 你会开始学其他同学 在书包写东写西 但我建议最好写妈妈 我会用功读书 用功读书 怎么会从我嘴巴说出 不想你输 所以要叫你用功读书 妈妈织给你的毛衣 你要好好的收着 因为母亲节到的时候我要告诉她我还留着 对了!我会遇到了周润发 所以你可以跟同学炫耀 赌神未来是你爸爸 我找不到 童年写的情书 你写完不要送人 因为过两天你会在操场上捡到 你会开始喜欢上流行歌 因为张学友开始准备唱《吻别》 听妈妈的话 别让她受伤 想快快长大 才能保护她 美丽的白发 幸福中发芽 天使的魔法 温暖中慈祥 听妈妈的话 别让她受伤 想快快长大 才能保护她 长大后我开始明白 为什么我 跑得比别人快 飞得比别人高 将来大家看的都是我画的漫画 大家唱的都是 我写的歌 妈妈的辛苦 不让你看见 温暖的食谱在她心里面 有空就多多握握她的手 把手牵着一起梦游 听妈妈的话 别让她受伤 想快快长大 才能保护她 美丽的白发 幸福中发芽 天使的魔法 温暖中慈祥
二、文件操作基本流程
1 f = open('周杰伦.txt',encoding="utf8") # 打开文件 2 first_line = f.readline() 3 print('first line:',first_line) # 读第一行 4 print('我是分隔线'.center(50,'-')) 5 data = f.read() # 读取剩下的所有内容,文件大时不要用 6 print(data) # 打印读取内容 7 8 f.close() #关闭文件 9 10 输出 11 first line: 听妈妈的话 12 13 ----------------------我是分隔线----------------------- 14 词:周杰伦 曲:周杰伦 15 编曲:林迈可 洪敬饶 制作人:周杰伦 16 和声编写:周杰伦 和声:周杰伦 17 录音室:阿尔发录音室 18 歌词录入:Hybert Kwok 19 20 听妈妈的话 别让她受伤 21 想快快长大 才能保护她 22 美丽的白发 幸福中发芽 23 天使的魔法 温暖中慈祥
文件打开模式
1 文件句柄 = open('文件路径', '模式')
r 只读 读模式下面的用法以及示例 read是读取全部
f = open('周杰伦.txt', 'r',encoding="utf8") print(f.readable()) # 判断是否可读 f.close() 输出 True f = open('周杰伦.txt', 'w',encoding="utf8") print(f.readable()) f.close() 输出 False
f = open('周杰伦.txt', 'r',encoding="utf8") print("1",f.readline(),end="") # 根据光标读取行,end=""表示默认不换行,readline()里面不加参数 print("2",f.readline()) print("3",f.readline()) print("4",f.readline()) print("5",f.readline()) print("6",f.readline()) # 文件没有那么多行时,默认不报错,打印空 f.close() 输出 1 听妈妈的话 2 听妈妈的话 别让她受伤 3 想快快长大 才能保护她 4 美丽的白发 幸福中发芽 5 天使的魔法 温暖中慈祥 6
f = open('周杰伦.txt', 'r',encoding="utf8") print(f.readlines()) # 读取全部并放到一个列表里面 f.close() 输出 ['听妈妈的话\n', '听妈妈的话 别让她受伤\n', '想快快长大 才能保护她\n', '美丽的白发 幸福中发芽\n', '天使的魔法 温暖中慈祥']
w 只读 写模式下面的用法以及示例
如果文件存在,则清空内容,进行操作;如果文件不存在,则新建文件再操作
f = open('周杰伦', 'w',encoding="utf8") f.write("11111\n") f.write("22222\n") # 写完要自己换行 加\n f.write("33333\n4444\n555\n") f.close() 输出 可看到文件更新的内容
1 f = open('周杰伦', 'w',encoding="utf8") 2 print(f.writable()) 3 f.close()
f = open('周杰伦', 'w',encoding="utf8") print(f.writelines(["111\n","222\n"])) # 传列表,列表内可以写多行 f.close() # 文件内容只能时字符串,只能写字符串
a 追加 追加内容,原有内容不会被覆盖
f = open('周杰伦', 'a',encoding="utf8") f.write("写到文件最后") f.close() # a模式下再写内容,则不会被清空,再文件后面进行追加
文件处理之其它模式 + 表示同时读写某个文件
r+ 可读可写
f = open("周杰伦","r+",encoding="utf8") data = f.read() print(data) f.write("666") # 根据光标的位置添加内容 f.close()
src_f = open('周杰伦', 'r', encoding='utf8') data = src_f.readlines() src_f.close() # 取到文件内容并放到一个列表里面 # for i in data: # print(i) print(data) dst_f = open('周杰伦', 'w', encoding='utf8') # dst_f.writelines(data) dst_f.write(data[0]) # 通过索引找到文件内容的第一个内容并覆盖原文件写入 dst_f.close()
with 包含有关闭文件这个操作,可以节省代码
1 with open("xxx","w") as f: # f这里充当文件句柄 2 f.write("1111\n")
with open("xxx", "r") as f,\ # \ 表示一行代码过长时,找到合适的分割,可换行 open("xxx_new", "w") as n: data = f.read() # 读取xxx文件的所有内容 n.write(data) # 取到xxx文件的内容并写到xxx_new文件
字符串--->编码(encode)--->bytes
bytes--->解码(decode)--->字符串
b的方式不能指定编码
f = open("周杰伦","rb") # b模式下不能指定编码 data=f.read() print(data) f.close() 输出 b'11111\r\n2222\r\n3333\r\n' # \r\n 是windows下的换行操作
b模式的应用场景
1、处理图片的视频
2、可以跨平台
3、b模式对linux系统无意义
补充:文件默认的打开模式是rt,不加模式的情况下
循环文件的推荐方式用for循环,省内存
三、文件操作方法
序号 | 方法及描述 |
---|---|
1 |
file.close() 关闭文件。关闭后文件不能再进行读写操作。 |
2 |
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
3 |
file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
4 |
file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。 |
5 |
file.next() 返回文件下一行。 |
6 |
file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
7 |
file.readline([size]) 读取整行,包括 "\n" 字符。 |
8 |
file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
9 |
file.seek(offset[, whence]) 0(从起始开始) 1(在相对位置) 2(从末尾开始) 倒数要用负数 设置文件当前位置 |
10 |
file.tell() 返回文件当前位置。 |
11 |
file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。 |
12 |
file.write(str) 将字符串写入文件,没有返回值。 |
13 |
file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
14 |
closed 判断文件是否关闭 |