打开文件
#’filename.txt‘处指定文件路径,可以使用绝对路径和相对路径 #mode=‘w‘指定文件的打开方式 #encoding=‘utf-8‘指定文件编码 f = open(‘filename.txt‘,mode=‘w‘,encoding=‘utf-8‘) f.close() #关闭文件,使用上面句柄打开文件后,文件会一直在内存中运行,在对文件进行操作后,应记得关闭文件 --------------------------------------------------------------------------- #使用with关键字+open打开文件后,不用再使用close对文件进行关闭,并且可以同时打开多个文件,打开多个文件需要用逗号隔开,最后的句柄名称后需要加冒号 with open(‘filename.txt‘,mode=‘w‘,encoding=‘utf-8‘) as f:#打开一个文件 with open(‘filename.txt‘,mode=‘w‘,encoding=‘utf-8‘) as f,with open(‘filename.txt‘,mode=‘w‘,encoding=‘utf-8‘) as f1:#打开多个文件
操作文件
1.读
# 此处filename.txt文件中原始内容为:人生苦短,我用python # ①r——只读,不存在报错 with open(‘filename.txt‘, mode=‘r‘, encoding=‘utf-8‘) as f: content = f.read() print(content) >>> 人生苦短,我用python # ②rb——以bytes类型读 with open(‘filename.txt‘, mode=‘rb‘) as f: content = f.read() print(content) >>> b‘\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python‘ # ③r+——读写,不存在不会创建,写会覆盖之前内容 with open(‘filename.txt‘, mode=‘r+‘,encoding=‘utf-8‘) as f: content = f.read() f.write(‘\n新添加:Life is short , I use python‘) print(content) >>> 人生苦短,我用python # ④target_file.txt中的内容为: >>> 人生苦短,我用python >>> 新添加:Life is short , I use python # ⑤r+b——以bytes类型读写 with open(‘filename.txt‘, mode=‘r+b‘) as f: content = f.read() f.write(‘\n新添加:Life is short , I use python‘.encode(‘utf-8‘)) print(content) >>> b‘\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8python‘ # target_file.txt中的内容为: >>> 人生苦短,我用python >>> 新添加:Life is short , I use python
2.写
# 此处filename.txt文件中原始内容为空,需要向其中写入:人生苦短,我用python # ①w——只写,不存在则创建,存在则清空再写 with open(‘filename.txt‘, mode=‘w‘, encoding=‘utf-8‘) as f: content = f.write(‘人生苦短,我用python‘) # target_file.txt中的内容为: >>> 人生苦短,我用python # ②x——只写,不存在则创建,存在则报错 with open(‘filename.txt‘, mode=‘x‘, encoding=‘utf-8‘) as f: content = f.write(‘人生苦短,我用python‘) # target_file.txt存在: >>> Traceback (most recent call last): >>> File "D:/python_fullstack_s9/day8/practice.py", line 94, in <module> >>> with open(‘target_file.txt‘, mode=‘x‘, encoding=‘utf-8‘) as f: >>> FileExistsError: [Errno 17] File exists: ‘target_file.txt‘ # filename.txt不存在: >>> 人生苦短,我用python # # ③wb——以bytes类型写 with open(‘filename.txt‘, mode=‘wb‘) as f: content = f.write(‘人生苦短,我用python‘.encode(‘utf-8‘)) >>> 人生苦短,我用python # # ④w+——写读,不存在则创建,写会覆盖之前的内容 with open(‘filename.txt‘, mode=‘w+‘) as f: content = f.write(‘hello,world‘) date = f.read() print(date) >>> # filename.txt中的内容为: >>> hello,world # # ⑤w+b——以bytes类型写读 with open(‘filename.txt‘, mode=‘w+b‘) as f: content = f.write(‘hello,world‘.encode(‘utf-8‘)) date = f.read() print(date) >>> b‘‘ # filename.txt中的内容为: >>> hello,world
3.追加
# 此处filename.txt文件中原始内容为:人生苦短,我用python,需要在后面添加‘谁用谁知道‘内容 # ①a——追加,不存在则创建,存在则追加 with open(‘filename.txt‘, mode=‘a‘, encoding=‘utf-8‘) as f: content = f.write(‘谁用谁知道‘) filename.txt中的内容为: >>> 人生苦短,我用python谁用谁知道 # ②ab——以bytes类型追加 with open(‘filename.txt‘, mode=‘ab‘) as f: content = f.write(‘谁用谁知道‘.encode(‘utf-8‘)) >>> 人生苦短,我用python谁用谁知道 # ③a+——可读可写,不存在则创建,写则追加 with open(‘filename.txt‘, mode=‘a+‘,encoding=‘utf-8‘) as f: content = f.write(‘谁用谁知道‘) f.seek(0) date = f.read() print(date) >>> 人生苦短,我用python谁用谁知道 # ④a+b——以bytes类型可读可写 with open(‘filename.txt‘, mode=‘a+b‘) as f: content = f.write(‘谁用谁知道‘.encode(‘utf-8‘)) f.seek(0) date = f.read() print(date) >>> 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‘ # filename.txt中的内容为: >>> 人生苦短,我用python谁用谁知道
4.其他操作
① 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循环文件句柄
with open(‘filename.txt‘, mode=‘r‘,encoding=‘utf-8‘) as f: for i in f: print(i) >>> 人生苦短,我用python >>> 谁用谁知道