我经常使用下面的两个函数将文件内容读取到字符串并将字符串写入文件。据我所知,这些函数在Python标准库中不存在,我很好奇为什么。具有高级目录和文件操作的标准库模块shutil没有此功能,我确信这是一个明确的设计选择,不能在那里使用它。即我想知道以下内容:
功能
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)
答案 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
http://docs.python.org/library/stdtypes.html?highlight=readline#file.read readline
http://docs.python.org/library/stdtypes.html?highlight=readline#file.readline readlines
http://docs.python.org/library/stdtypes.html?highlight=readline#file.readlines xreadline
http://docs.python.org/library/stdtypes.html?highlight=readline#file.xreadlines(已弃用,已替换为for line in file
)根据文件的大小,内容类型以及您要对其执行的操作,您需要进行切换。
有一个像你写的“read()”和“write()”函数对于处理小文本文件很有用 - 但在其他情况下它可能很麻烦。
例如,如果您正在尝试读取9GB日志文件 - 将所有内容读入内存中,您的想法会在大多数当前计算机(具有4-8GB内存)上导致很多问题。如果该日志文件是二进制格式,那么处理数据就会出现问题。
由于您可以通过链接这些命令轻松地使用单行读取/写入文件,因此使用另一种更有限的方式处理文件对我来说毫无意义。