Python文件Slurp

时间:2009-10-27 16:08:07

标签: python file-io

是否有单行读取Python中文件的所有行,而不是标准:

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

似乎经常这样做,所以必须有一个单行。有什么想法吗?

3 个答案:

答案 0 :(得分:93)

这会将内容放入Python 2.6 1 及以上的单个字符串中:

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

  2. 保证立即关闭的旧方法是使用它来创建单个字符串:

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

    这是为了创建一个行列表:

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

    实际上它会在某些版本的CPython中立即关闭,但在Jython,IronPython以及可能是CPython的未来版本时,“只有当垃圾收集器到达它时才关闭”。

答案 1 :(得分:1)

如果您使用的是Python3,请确保正确遵守文件的输入编码,例如:

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

Python3 codec list中找到编解码器名称列表。 (无论何时你需要任何非ASCII输入,这种机制对于Python2也是可取的)

答案 2 :(得分:0)

Starting in 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