为什么在Python标准库中没有读/写文件的功能

时间:2012-10-09 16:34:46

标签: python

我经常使用下面的两个函数将文件内容读取到字符串并将字符串写入文件。据我所知,这些函数在Python标准库中不存在,我很好奇为什么。具有高级目录和文件操作的标准库模块shutil没有此功能,我确信这是一个明确的设计选择,不能在那里使用它。即我想知道以下内容:

  • 不在Python标准库中包含它的潜在原因是什么
  • 以这种方式处理文件是否有任何缺点(假设有人知道整个文件内容将被加载到内存中)

功能

def read_file(path):
    with open(path) as f:
        return f.read()

def write_file(path, data):
    with open(path, 'wb') as f:
        return f.write(data)

澄清我发现以下更具可读性

write_file('/tmp/test', 'test')

然后是以下两种选择:

open('/tmp/test', 'wb').write('test')

with open('/tmp/test', 'wb') as f:
    f.write(data)

2 个答案:

答案 0 :(得分:5)

这些都是单行的,你真的不需要它们的功能。

data = open("filename").read()
open("filename", "w").write(data)

至少在CPython中,在执行这些语句之后,文件将立即关闭,因为您没有保留对文件对象的引用。确保在发生异常时文件被关闭并不是真正的问题,尤其是在简单的脚本中。

在其他Python实现中,例如Jython和IronPython,这可能会更成问题。如果是,那就是with(你也可以在一行上清楚地写出来):

with open("filename") as f: data = f.read()

如果你发现拥有像你所写的那样的帮助函数更清楚,那么一定要写出来;他们很清楚。但它们几乎没有必要,大多数Python程序员都不会使用它们。

答案 1 :(得分:2)

除了他们两个都可以像@Kindall回答一样......

您的示例会传递很多选项,将其呈现给特定任务。

def read_file(path):
    with open(path) as f:
        return f.read()

Open需要一些参数。 http://docs.python.org/library/functions.html#open

  

open(name [,mode [,buffering]])

您还可以通过多种方式读取文件:

根据文件的大小,内容类型以及您要对其执行的操作,您需要进行切换。

有一个像你写的“read()”和“write()”函数对于处理小文本文件很有用 - 但在其他情况下它可能很麻烦。

例如,如果您正在尝试读取9GB日志文件 - 将所有内容读入内存中,您的想法会在大多数当前计算机(具有4-8GB内存)上导致很多问题。如果该日志文件是二进制格式,那么处理数据就会出现问题。

由于您可以通过链接这些命令轻松地使用单行读取/写入文件,因此使用另一种更有限的方式处理文件对我来说毫无意义。