本篇博客是用于记录我在学习
python
的基本语法中的IO编程部分的内容。基本参考廖雪峰python教程博客,我对其进行了删减和补充,附带一些自己的理解,大家可以进行部分参考,也可以直接移步至他的博客。
文件读写
- 要以读文件的模式打开一个文件对象,使用Python内置的
open()
函数,传入文件名和标示符(如果是UTF-8编码的文本文件,使用r
,如果是二进制文件,使用rb
;如果是写的话,就是对应的w
)。必须保证你所给出的路径中,要打开的文件是存在的,如果不存在,就会抛出IOError
。
>>> f=open('招聘信息.md','r')
note:可以使用文件的绝对路径和相对路径,使用相对路径时,你就得知道你现在工作的路径,如果你不知道,可以查看https://jingyan.baidu.com/article/a3a3f811d29f328da2eb8aff.html。
-
打开文件后,就可以直接调用
read()
方法,进行读取(但这样是一次性读取所有的内容)。 -
最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
>>> f.close()
- 为了保证每次都能执行
f.close()
语句,可以使用try... finally...
语句,形如:try: f = open('/path/to/file', 'r') print(f.read()) finally: if f: f.close()
- 可以使用
with
语法进行简化,下面语句是和上一语句完全等价的。with open('/path/to/file', 'r') as f: print(f.read())
- 以上可以通过以下的图进行总结。
字符编码
- 要读取非UTF-8编码的文本文件,需要给
open()
函数传入encoding
参数,例如,读取GBK编码的文件:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
>>> f.read()
'测试'
- 遇到有些编码不规范的文件,你可能会遇到
UnicodeDecodeError
,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()
函数还接收一个errors
参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')
- 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久的新贵,你一定遇到过
UnicodeEncodeError
、UnicodeDecodeError
错误,每当遇到错误我们就拿着encode
、decode
函数翻来覆去的转换,有时试着试着问题就解决了,有时候怎么试都没辙,只有借用 Google 大神帮忙,但似乎很少去关心问题的本质是什么,下次遇到类似的问题重蹈覆辙,那么你有没有想过一次性彻底把 Python 字符编码给搞懂呢?在知乎上看了一个帖子还写得不错,这里就直接为大家上链接了,希望对大家有帮助。
https://zhuanlan.zhihu.com/p/25148581?utm_medium=social&utm_source=qq
操作文件和目录
操作目录
在Windows系统中,可以直接利用命令行输入操作系统提供的各种命令来完成。
python
内置的os
模块可以直接调用操作系统提供的接口函数,完成对文件和目录的操作。
- 操作文件和目录的函数一部分放在
os
模块中,一部分放在os.path
模块中,这一点要注意一下。查看、创建和删除目录可以这么调用:# 显示当前的绝对路径 >>> os.path.abspath('.') 'C:\\Users\\Administrator\\Desktop' # 表示出需要添加的新目录 >>> os.path.join('C:\\Users\\Administrator\\Desktop','liaochengyu') 'C:\\Users\\Administrator\\Desktop\\liaochengyu' # 使用mkdir命令创建新的目录 >>> os.mkdir('C:\\Users\\Administrator\\Desktop\\liaochengyu') # 使用rmdir命令删除上一级目录 >>> os.rmdir('C:\\Users\\Administrator\\Desktop\\liaochengyu')
操作文件
- 在操作文件时,必须保证你将要操作的文件在当前的工作路径下,假设在当前路径下有一文件
my_story_final.jpg
:# 对文件重命名: >>> os.rename('my_story_final.jpg', 'my_story_final.png') # 删掉文件: >>> os.remove('my_story_final.png')
note:不能实现直接的复制文件,具体可以使用
shutil
模块。
实用操作
- 我们要列出当前目录下的所有目录:
>>> [x for x in os.listdir('.') if os.path.isdir(x)] ['oral workshop', '文档格式']
- 列出当前路径下所有的md文件:
>>> [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.md'] ['2018-4-4-Matplotlab.md', '2018-4-8-IO编程.md', '招聘信息.md', '驾考归纳.md']
小结
Python的os模块封装了操作系统的目录和文件操作,要注意这些函数有的在os模块中,有的在os.path模块中。