07 Day Python之文件操作
文件操作
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序是无法直接操作硬件的,这就用到了操作系统。操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来。
一、打开文件
1、文件句柄方式
1 # 1. 打开文件,得到文件句柄并赋值给一个变量 2 f = open('target_file.txt', mode='r', encoding='utf-8') 3 4 # 2. 通过句柄对文件进行操作 5 content = f.read() 6 7 # 3.输出读取到的结果 8 print(content) 9 10 # 4. 关闭文件 11 f.close() 12 13 >>> 文件中的内容: 14 >>> python 15 >>> java
2、上下文方式
1 # 1. with关键字引导上下文方式打开文件,并将句柄赋予别名f 2 with open('target_file.txt', mode='r', encoding='utf-8') as f: 3 4 # 2. 通过句柄对文件进行操作 5 content = f.read() 6 7 # 3.输出读取到的结果,用with上下文方式对文件进行操作会在结束操作时默认关闭文件,不必要主动close() 8 print(content)
二、操作文件
1、读
1 # 此处target_file.txt文件中原始内容为:人生苦短,我用python 2 # ①r——只读,不存在报错 3 with open('target_file.txt', mode='r', encoding='utf-8') as f: 4 content = f.read() 5 print(content) 6 >>> 人生苦短,我用python 7 8 # ②rb——以bytes类型读 9 with open('target_file.txt', mode='rb') as f: 10 content = f.read() 11 print(content) 12 >>> b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python' 13 14 # ③r+——读写,不存在不会创建,写会覆盖之前内容 15 16 追加:#因为先读,光标会移动到后面。所以会追加 17 with open('target_file.txt', mode='r+',encoding='utf-8') as f: 18 content = f.read() 19 f.write('\n新添加:Life is short , I use python') 20 print(content) 21 >>> 人生苦短,我用python 22 # ④target_file.txt中的内容为: 23 >>> 人生苦短,我用python 24 >>> 新添加:Life is short , I use python 25 26 覆盖:#光标在前面,所以直接覆盖。按照字符覆盖。 27 with open('target_file.txt', mode='r+',encoding='utf-8') as f: 28 f.write('\n新添加:Life is short , I use python') 29 30 31 #⑤r+b——以bytes类型读写 32 with open('target_file.txt', mode='r+b') as f: 33 content = f.read() 34 f.write('\n新添加:Life is short , I use python'.encode('utf-8')) 35 print(content) 36 >>> b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python' 37 target_file.txt中的内容为: 38 >>> 人生苦短,我用python 39 >>> 新添加:Life is short , I use python
2、写
1 # 此处target_file.txt文件中原始内容为空,需要向其中写入:人生苦短,我用python 2 # ①w——只写,不存在则创建,存在则清空再写 3 with open('target_file.txt', mode='w', encoding='utf-8') as f: 4 content = f.write('人生苦短,我用python') 5 # target_file.txt中的内容为: 6 >>> 人生苦短,我用python 7 8 9 # ②x——只写,不存在则创建,存在则报错 10 with open('target_file.txt', mode='x', encoding='utf-8') as f: 11 content = f.write('人生苦短,我用python') 12 # target_file.txt存在: 13 >>> Traceback (most recent call last): 14 >>> File "D:/python_fullstack_s9/day8/practice.py", line 94, in <module> 15 >>> with open('target_file.txt', mode='x', encoding='utf-8') as f: 16 >>> FileExistsError: [Errno 17] File exists: 'target_file.txt' 17 # target_file.txt不存在: 18 >>> 人生苦短,我用python 19 20 # # ③wb——以bytes类型写 21 with open('target_file.txt', mode='wb') as f: 22 content = f.write('人生苦短,我用python'.encode('utf-8')) 23 >>> 人生苦短,我用python 24 25 # # ④w+——写读,不存在则创建,写会覆盖之前的内容 26 with open('target_file.txt', mode='w+') as f: 27 content = f.write('hello,world') 28 f.seek(0) #移动光标到最前 29 date = f.read() 30 print(date) 31 >>>hello,world 32 # target_file.txt中的内容为: 33 >>> hello,world 34 35 # # ⑤w+b——以bytes类型写读 36 with open('target_file.txt', mode='w+b') as f: 37 content = f.write('hello,world'.encode('utf-8')) 38 date = f.read() 39 print(date) 40 >>> b'' 41 # target_file.txt中的内容为: 42 >>> hello,world
3、追加
1 # 此处target_file.txt文件中原始内容为:人生苦短,我用python,需要在后面添加'谁用谁知道'内容 2 # ①a——追加,不存在则创建,存在则追加 3 with open('target_file.txt', mode='a', encoding='utf-8') as f: 4 content = f.write('谁用谁知道') 5 target_file.txt中的内容为: 6 >>> 人生苦短,我用python谁用谁知道 7 8 # ②ab——以bytes类型追加 9 with open('target_file.txt', mode='ab') as f: 10 content = f.write('谁用谁知道'.encode('utf-8')) 11 >>> 人生苦短,我用python谁用谁知道 12 13 # ③a+——可读可写,不存在则创建,写则追加 14 with open('target_file.txt', mode='a+',encoding='utf-8') as f: 15 content = f.write('谁用谁知道') 16 f.seek(0) 17 date = f.read() 18 print(date) 19 >>> 人生苦短,我用python谁用谁知道 20 21 # ④a+b——以bytes类型可读可写 22 with open('target_file.txt', mode='a+b') as f: 23 content = f.write('谁用谁知道'.encode('utf-8')) 24 f.seek(0) 25 date = f.read() 26 print(date) 27 >>> b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python\xe8\xb0\x81\xe7\x94\xa8\xe8\xb0\x81\xe7\x9f\xa5\xe9\x81\x93' 28 # target_file.txt中的内容为: 29 >>> 人生苦短,我用python谁用谁知道
4、文件修改
python没有提供直接修改文件的函数,只能新建文件,将源文件的内容修改完成后写入新文件中,再把原文件删除,新文件重命名
1 import os 2 3 with open('源文件', encoding='utf-8') as f, open('源文件.bak', mode='w', encoding='utf-8') as f_w: 4 for i in f: 5 if '源文件' in i: 6 i = i.replace('源文件', '更改后的源文件') 7 f_w.write(i) 8 9 os.remove('源文件') 10 os.rename('源文件.bak','源文件')
5、其他操作
① seek() 移动光标指针位置
seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
② tell() 返回当前指针所在的位置
tell对于英文字符就是占一个,中文字符占三个,参数表示的是字节数区分与read()的不同.
③ truncate() 截断文件
truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
④ readline() 读取一行
⑤ readlines() 读取多行,返回为列表
⑥ readable() 文件是否可读
⑦ writeline() 写入一行
⑧ writelines() 写入多行
⑨ writable() 文件是否可读
⑩ closed() 文件是否关闭
⑪ encoding=’utf-8’ 如果文件打开模式为b,则没有该属性
⑫ flush() 立刻将文件内容从内存刷到硬盘
⑬ for循环文件句柄
1 with open('target_file.txt', mode='r',encoding='utf-8') as f: 2 for i in f: 3 print(i) 4 >>> 人生苦短,我用python 5 >>> 谁用谁知道
浙公网安备 33010602011771号