首先我们在电脑本地创建一个test.txt的文件,文件中写入四行内容,如图所示。
然后我们开始读取文件,在Python中提供了一个内置函数open(),它用于打开一个文件,创建一个file 对象,然后可以对file 对象进行读取操作。
test = open('test.txt', 'r')
print(test.read())
#代码结果:
hello
world
Python
数据分析
上面open()函数中有两个参数,第一个是文件的名称,可以使用相对路径,也可以使用绝对路径,如果使用相对路径则需要当前代码脚本文件和读取文件同一级目录,否则就是抛出一个FileNotFoundError的异常。
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
第二个参是指的文件的打开方式,比如只读,写入或者追加等,如果不添加的话,默认是只读方式打开文件。在Python中文件打开方式多达10余种,常用的打开方式如表所示。
打开方式 | 作用 | 功能描述 |
---|---|---|
r | 读 | 以只读方式打开文件,文件不存在则报错 |
r+ | 读、覆盖写 | 以读写方式打开文件,文件不存在则报错 |
rb | 读 | 以只读方式打开文件读取二进制数据,文件不存在则报错 |
rb+ | 读、覆盖写 | 以读写方式打开文件操作二进制数据,文件不存在则报错 |
w | 写 | 以只写方式打开文件,文件存在则覆盖,不存在则创建 |
w+ | 读、覆盖写 | 以读写方式打开文件,文件存在则覆盖,不存在则创建 |
wb | 写 | 以只写方式打开文件写入二进制数据,文件存在则覆盖,不存在则创建 |
wb+ | 读、覆盖写 | 以读写的方式打开文件写入二进制数据,文件存在则覆盖,不存在则创建 |
a | 追加写 | 追加内容,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件 |
a+ | 读、追加写 | 读写内容,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件 |
ab | 追加写 | 追加二进制数据,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件 |
ab+ | 读、追加写 | 读写二进制数据,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件 |
以上各种方式无法就是三个操作,读r(read),写w(write),追加a(append),如果带b表示操作的是二进制数据,二进制表示的文件在硬盘上存储的数据原始的样子。上面的示例使用二进制读取是这样的:
test = open("test.txt", 'rb')
print(test.read())
#代码结果:
b'hello\nworld\nPython\n\xe6\x95\xb0\xe6\x8d\xae\xe5\x88\x86\xe6\x9e\x90'
为什么使用二进制的数据呢?因为图片或视频文件是不能用字符串方式来显示,所以只能用二进制的方式来读写,而且二进制数据可以跨平台使用。
在上一个小节,我们看到了12种文件打开方式用于读写操作,而且读写需要的mode不一样,那如果用只读模式打开,进行写操作会有什么样的结果呢?
test = open("test.txt", 'r')
word = '一个新字符串'
test.write(word)
运行结果呢,不出意外,报错
io.UnsupportedOperation: not writable
所以需要按照指定的文件打开方式:
test = open("test.txt", 'w')
word = '一个新字符串'
test.write(word)
这是打同级目录下的test.txt文件,发现只有一行文字,就是我们新写入的字符串。同样如果是用写的方式打开文件,进行文件的操作的时候也会同样报io异常:not readable。
注意:文件的写操作,默认的编码是系统编码,而最常用的中文window系统默认的编码格式是GBK,如果使用追加写的方式,原来文件内容字符编码的不统一的话,会产生乱码。所以有关写的操作的时候,最好在open()时指定字符编码,以免出现乱码。
最后我们再看下append的方式是怎么样的,继续使用上面的test.txt文件,继续写入:
test = open("test.txt", 'a')
word = '又一个新字符串'
test.write(word)
这时我们查看一下text.txt文件,文件内容是:"一个新字符串又一个新字符串",可见“a”方式是实现了追加写而不是覆盖写。
不过以上三个示例的写法并不规范,如果在代码中打开了某个文件,没有释放掉,其他的程序是无法操作文件,所以需要在最后关闭文件,而且在文件操作时候还需要进行异常处理,所以完善的写法应该是如下。
文件操作完整写法:
try:
test = open("test.txt", 'r', encoding="UTF8")
word = '又一个新字符串'
test.write(word)
except Exception as e:
print("操作文件异常:{}".format(e))
finally:
test.close()
如果每次操作文件的时候需要写try 捕获异常,还需要释放资源。这样代码显得很冗余,所以Python中还提供了一种方法就是with用法,会自动进行资源的获取和释放,用法也比较简单易懂。
文件操作完整写法:
with open("test.txt", 'a', encoding="UTF8") as test:
word = '又一个新字符串'
test.write(word)
with 语句实质是上下文管理,多用于文件操作、数据库连接操作等应用场景。
多数情况下,操作的是excel文件,而操作excel文件会有很多专用的库,例如openpyxl等,这些内容等到后面需要的再讲到。
对于数据分析入门来讲,Python的这些基础知识就基本够用,当然它不仅仅能做数据分析,还可以开发web,也支持面向对象的编程方式,语言的深度远不止这些,感兴趣的可以自行找一些学习资料,毕竟现在网上最不缺的就是老师。
预备小菜的章节到这里就结束了,后面我们开始制作“大餐”。