【Python学习】打开文件并查看文件内容

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和你好世界中间会有一个空行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值