开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情。
一、打开文件
打开文件用到的函数是open,可以直接使用。 其后可附加选项,比如r表示只读,w表示写入,a表示追加。
# 以只读方式打开该目录下的test.txt
fp = open('D:/2022code/python_note12/test.txt', 'r')
print(fp)
print(type(fp))
运行结果如下,要注意print(fp)并不是打印出读到的内容,它的类型是'_io.TextIOWrapper',是Python内部给出的,在这里不深入研究,简单理解为C语言中的FILE类型即可。
当打开一个不存在的文件时就会抛出异常,如下图所示。
二、关闭文件
文件在用open函数打开之后会有一个返回值,这个返回值是一个文件对象,通过它的close方法即可将打开的文件关闭。
# 以只读方式打开该目录下的test.txt
fp = open('D:/2022code/python_note12/test.txt', 'r')
print(fp)
print(type(fp))
fp.close()
上面的代码与前文仅多了一个关闭文件,且从print所得的现象来看没有任何区别。
虽然文件关闭并没有感觉到有什么作用,但是打开的文件一定要关闭。打开文件实际上是在申请一定的系统资源,当不再需要使用文件时,一定要关闭文件,归还使用的资源,否则就可能出现意想不到的错误。
比如文件资源泄漏,这样其他部分的代码就无法顺利打开文件;又如一个系统的资源是有限的,所以一个程序能打开的文件个数也是有上限的,如果一味打开文件,就会出现问题。
三、写文件
使用write来向文件写入内容。
fp = open('D:/2022code/python_note12/test.txt', 'w')
fp.write('hello world') # 写入hello world
fp.close()
以写方式打开对应目录的文件,会自动把原有的内容清空掉,运行程序后可以看到文件内写入了hello world。
四、读文件
1.read
读文件需要将文件以'r'方式打开,并使用read函数来读取内容。
test.txt内容如下:
运行下面的代码读取文件中的内容。
fp = open('D:/2022code/python_note12/test.txt', 'r') # r表示读
text = fp.read(7) # 读取7个字符
print(text)
fp.close()
发现会报错,这实际上是编码规则的问题。
这里就要简单介绍一下中文的编码规则。在计算机中,中文是用数字来编码字符的,最常见的两套编码规则是GBK和UTF-8。因此实际操作时,需要保证文件内容的编码方式和代码中操作文件的编码方式相匹配,否则就会有问题。
仔细看上面txt文件的右下角,会发现它的编码规则是UTF-8,这说明Python中中文的编码规则是GBK,两者不匹配,因此会报错。
下面让代码按照UTF-8规则读取字符。
# 指定编码规则读取即可
fp = open('D:/2022code/python_note12/test.txt', 'r', encoding='utf8')
text = fp.read(7) # 读取7个字符
print(text)
fp.close()
2.按行读取
更常见的写法是直接按行读取。
fp = open('D:/2022code/python_note12/test.txt', 'r', encoding='utf8')
for line in fp: # 循环按行读取,直到读取到文件末尾
print(f'line = {line}')
fp.close()
如下图,文件中的内容被按行读取到了line变量中。
3.readlines
还可以用readlines方法直接把文件中所有的内容都读出来,且读取到的结果按行放在一个列表内,且这种方法读取速度较快。
注意不是readline,readline仅会读取一行的内容。
fp = open('D:/2022code/python_note12/test.txt', 'r', encoding='utf8')
lines = fp.readlines()
print(lines)
fp.close()
运行结果如下图,所有内容被读取出来,且放在一个列表内。