test.txt文件内容
hello world
你好世界
尝试使用上下文管理器打开文件
with open('test.txt', 'r', encoding='utf8') as file:
lines = file.readline()
print(lines)
此时报错:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 13: invalid continuation byte
百度了一下,把编码格式变成gbk和gb2312都试了一下,此时代码运行不会报错了,但是运行结果只输出了英文的“hello world”,没有输出中文的“你好世界”。
# 运行结果
hello world
- 很后面才知道原来只输出一行不是因为编码格式或者什么的,是因为用了
readline()
而不是readlines()
- 文件对象提供了三个“读”方法:
.read()
、.readline()
和.readlines()
。其中.read()
生成文件内容最直接的字符串表示.readline()
和.readlines()
之间的差异是后者一次读取整个文件,像.read()
一样。.readlines()
自动将文件内容分析成一个行的列表,.readline()
每次只读取一行。- 参考文章:https://blog.csdn.net/weixin_29809497/article/details/116179095
- 然后上面想要读取文件里的内容,其实只要用
.read()
就行了呜呜,基础没打好,真的是在这里浪费了好多时间,各种找资料以为编码格式有问题,原来有问题的是我自己。
换成用readlines直接读取文件内容
file = open('test.txt', 'r', encoding='gb2312')
lists = file.readlines()
print(lists)
file.close()
运行结果:
['hello world\n', '你好世界']
也可以用for…in…结构输出文件内容
file = open('test.txt', 'r', encoding='gb2312')
for tmp in file:
print(tmp, end='')
file.close()
运行结果:
hello world
你好世界
这边的print函数里面的 end=''
,是为末尾end传递一个空字符串,这样print函数不会在字符串末尾添加一个换行符。
如果不加这个end=''
,输出的时候在hello world和你好世界中间会有一个空行。