Python 文件读取

48 投票
3 回答
22832 浏览
提问于 2025-04-15 15:25

有没有一种简单的方法可以用一行代码在Python中读取文件的所有行,而不是用下面这种标准的方法:

f = open('x.txt')
cts = f.read()
f.close()

看起来这个操作这么常见,应该有一种一行代码就能搞定的办法。谁有什么想法吗?

3 个回答

1

如果你在使用Python3,确保你正确处理文件的输入编码,比如:

import codecs
with codecs.open(filename, 'r', encoding="utf8") as file:
    cts = file.read()

你可以在Python3的编码列表中找到编码名称的列表。
(这个方法在你使用Python2时也很有用,特别是当你需要处理非ASCII字符的输入时)

12

从Python 3.5开始,你可以使用pathlib模块,这样可以让你用更现代的方式来处理文件。因为是Python 3,所以它区分了读取文本和读取字节这两种方式:

from pathlib import Path

text_string = Path('x.txt').read_text()  # type: str

byte_string = Path('x.txt').read_bytes()  # type: bytes
111

这个方法可以在Python 2.6及以上版本中把内容读入一个字符串:

with open('x.txt') as x: f = x.read()

而这个方法则会创建一个行的列表:

with open('x.txt') as x: f = x.readlines()

这些方法确保在读取完后,输入文件会立即关闭。

注释:

  1. 这种方法在Python 2.5中也可以使用,只需加上from __future__ import with_statement

一个较旧的方法是用这个来创建一个字符串,但它保证文件会立即关闭:

f = open('x.txt').read()

而这个方法则用来创建一个行的列表:

f = open('x.txt').readlines()

实际上,在某些版本的CPython中,文件会立即关闭,但在Jython、IronPython,以及可能的某些未来版本的CPython中,文件的关闭会等到“垃圾回收器处理它的时候”。

撰写回答