为何Python中以'r'模式打开文件后,list(文件句柄)返回所有行列表?
Python文件对象转列表的行为解析
问题描述
我偶然发现,在Python中以'r'模式打开文件后,使用list(文件句柄)并打印,会输出该文件所有行组成的列表。
示例文件trial.txt内容如下:
12345 67890 abcd
测试代码:
a = open("trial.txt", 'r') print(list(a))
运行输出:
['12345\n', '67890\n', 'abcd']
请问这一现象的原因是什么?
原因解析
这是因为Python的文件对象属于可迭代对象,list()函数的作用是将可迭代对象转换为列表,而文件对象的迭代逻辑就是逐行读取文件内容。
具体细节:
- 以
'r'(只读文本模式)打开的文件,迭代时会把文件中的每一行作为一个字符串元素返回 - 每行末尾的换行符
\n会被保留在字符串里,除非你打开文件时指定newline=''参数来调整换行符的处理方式 - 如果文件最后一行没有换行符,对应的字符串就不会带
\n,就像示例里的'abcd'
额外注意:文件对象是一次性迭代的,迭代完成后文件指针会移动到文件末尾,再次调用list(a)会得到空列表,需要用a.seek(0)将指针移回文件开头才能重新读取。
内容的提问来源于stack exchange,提问作者Ritwik Gupta
相关产品推荐
相关产品推荐

