Python_文件操作
一、文件操作流程
1. 打开文件,得到文件句柄并赋值给一个变量 # f = open('文件测试', 'r', encoding='utf8')
2. 通过句柄对文件进行操作 # f.write('hello world')
3. 关闭文件
次博测试使用文件如下:
对酒当歌,人生几何!
譬如朝露,去日苦多。
慨当以慷,忧思难忘。
何以解忧?唯有杜康。
青青子衿,悠悠我心。
但为君故,沉吟至今。
呦呦鹿鸣,食野之苹。
我有嘉宾,鼓瑟吹笙。
明明如月,何时可掇?
忧从中来,不可断绝。
越陌度阡,枉用相存。
契阔谈,心念旧恩。
月明星稀,乌鹊南飞。
绕树三匝,何枝可依?
山不厌高,海不厌深。
周公吐哺,天下归心。
二、操作方法
1. 打开文件的模式
- r ,只读模式(默认模式);
- w ,只写模式。【只能写,不能读,如果文件不存在就创建,如果存在就删除了再写】
- a ,追加模式。【可读,文件不存在就创建文件,如果存在就追加内容】
- r+ ,可读写文件。【可读;可写;可追加】
- w+ ,写读模式首先是写,所以会默认先清空所有内容并写入,再读光标后的内容,但是此时光标已经挪到了最后边
- a+ ,追加+读模式首先是追加,光标先挪到最后再追加,追加之后光标还是在最后
2. 其他操作
write直接覆盖,相当于linux的 '>'。
f = open('文件测试', 'w', encoding='utf8') # 此时已经清空,并不是写的时候才进行的清空 data = f.write('hello world') f.close()
直接创建文件。
f = open('文件测试_2', 'w', encoding='utf8') f.write('test''\n') # 创建一个新的文件,并写入test f.write('wangjie') # 直接紧挨着在后边进行添加,如果需要换行,需要手动写 f.close()
追加。
f = open('文件测试', 'a', encoding='utf8') f.write("\n" "wangjie") # a(append)是追加模式,直接追加到光标后边,如果需要换行,自行增加换行符 f.close()
readline,打印一行,如果两个readline则是两行,应为打印完第一行之后,光标在第一行最后。
f = open('文件测试', 'r', encoding='utf8') print(f.readline()) # 打印一行,光标已经在最后了 print(f.readline()) # 打印下一行 f.close()
readlines,打印所有行,但是打印出来的是一个列表。
f = open('文件测试', 'r', encoding='utf8') print(f.readlines()) for i in f.readlines(): print(i.strip())
这是for循环内部将f对象做成了一个迭代器,用一个取一个,对于文本就是用一行取一行,打开文件最优的方式!!!
f = open('文件测试', 'r', encoding='utf8') for i in f: print(i.strip())
tell是查看光标位置的,一个英文一个字符,一个中文3个字符。
f = open('文件测试', 'r', encoding='utf8') print(f.tell()) print(f.read(2)) print(f.tell())
seek调整光标位置。
f = open('文件测试', 'r', encoding='utf8') f.read(4) print(f.tell()) f.seek(0) print(f.tell())
flush刷新、清空缓存,将缓存中的东西立即放置到文件中(保存到磁盘中)。
f = open('文件测试', 'w', encoding='utf8') f.write('123') f.flush() f.write('456') # flush测试 import sys,time for i in range(30): print('*', end='', flush=True) time.sleep(0.2)
truncate,截断/删除,如果不定义位置,从头开始。
f = open('文件测试', 'a', encoding='utf8') # 句柄如果是"w",会默认全部先删除 f.truncate(10)
r+ 读写测试
f = open('文件测试', 'r+', encoding='utf8') print(f.readline()) f.write('王师傅') # 打印出第一句,并在最后追加
w+ 写读测试
f = open('文件测试', 'w+', encoding='utf8') f.write('王师傅') # 写读模式首先是写,所以会默认先清空所有内容并写入,再读光标后的内容,但是此时光标已经挪到了最后边 print(f.readline()) f.close()
a+ 追加+读测试
f = open('文件测试', 'a+', encoding='utf8') f.write('王师傅') # 追加+读模式首先是追加,光标先挪到最后再追加,追加之后光标还是在最后 print(f.read()) f.close()
三、with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
with open('文件测试', 'r', encoding='utf8') as f: print(f.read()) pass
Python3版本可以对多个文件执行with语句。
with open('文件测试', 'r', encoding='utf8') as f_read, open('文件测试_2', 'w', encoding='utf8') as f_write:
pass
四、文件操作小练习
1. 打印第六行,并在后边加上“like it”
方法一:
f = open('文件测试', 'r', encoding='utf8') date = f.readlines() f.close() number = 0 for i in date: number = number + 1 if number == 6: i = ''.join([i.strip(), 'like it']) # 拼接用join,以'...'的方法拼接 print(i.strip())
方法二 :
f = open('文件测试', 'r', encoding='utf8') date = f.readlines() f.close() date[5] = '但为君故,沉吟至今。 lite it' for i in date: print(i.strip())
2. 修改第六行,后边加上“like it”
f = open('文件测试', 'r', encoding='utf8') date = f.readlines() date[5] = date[5].replace('\n','') + 'like it\n' f.close() f = open('文件测试', 'w', encoding='utf8') for i in date: f.write(i) print(i.strip()) f.close()
3. 修改第六行,后边加上“like it”,并输出到另一个文件
正常方法
f_read = open('文件测试', 'r', encoding='utf8') f_write = open('文件测试_2', 'w', encoding='utf8') number = 0 for line in f_read: number = number + 1 if number == 6: line = ''.join([line.strip(),'hello world \n']) f_write.write(line) f_read.close() f_write.close()
with方法:
with open('文件测试', 'r', encoding='utf8') as f_read, open('文件测试_2', 'w', encoding='utf8') as f_write: number = 0 for line in f_read: number = number + 1 if number == 6: line = ''.join([line.strip(), 'hello world \n']) f_write.write(line) pass