为什么Python标准库中没有读/写文件的函数
我经常使用下面的两个函数将文件内容读取为字符串,并将字符串写入文件。据我所知,Python标准库中不存在这些函数,我很好奇为什么。具有高级目录和文件操作的标准库模块没有此功能,我确信这是一个明确的设计选择,不在其中。也就是说,我想知道以下几点:为什么Python标准库中没有读/写文件的函数,python,Python,我经常使用下面的两个函数将文件内容读取为字符串,并将字符串写入文件。据我所知,Python标准库中不存在这些函数,我很好奇为什么。具有高级目录和文件操作的标准库模块没有此功能,我确信这是一个明确的设计选择,不在其中。也就是说,我想知道以下几点: 不将其包含在Python标准库中的潜在原因是什么 以这种方式处理文件有什么缺点吗(假设您知道整个文件内容都将加载到内存中) 功能 def read_file(path): with open(path) as f: retur
- 不将其包含在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)
这些都是一行程序,您不需要为它们提供函数
data = open("filename").read()
open("filename", "w").write(data)
至少在CPython中,在执行这些语句之后,文件将立即关闭,因为您没有保留对file对象的引用。确保在发生异常时关闭文件并不是一个真正的问题,特别是在简单脚本中
在其他Python实现中,如Jython和IronPython,这可能会有更大的问题。如果是,则会出现带有的(您也可以将其清晰地写在一行上):
如果你发现像你写的那样有帮助函数更清晰,那么一定要写它们;它们很清楚。但是它们几乎不是必需的,大多数Python程序员都不会使用它们。这些都是一行程序,您不需要为它们提供函数
data = open("filename").read()
open("filename", "w").write(data)
至少在CPython中,在执行这些语句之后,文件将立即关闭,因为您没有保留对file对象的引用。确保在发生异常时关闭文件并不是一个真正的问题,特别是在简单脚本中
在其他Python实现中,如Jython和IronPython,这可能会有更大的问题。如果是,则会出现带有
的(您也可以将其清晰地写在一行上):
如果你发现像你写的那样有帮助函数更清晰,那么一定要写它们;它们很清楚。但是它们几乎不是必需的,大多数Python程序员都不会使用它们。除了它们之外,它们都可以在一行程序中使用,比如@Kindall答案
您的示例传递了许多选项,为特定任务呈现这些选项
def read_file(path):
with open(path) as f:
return f.read()
Open需要几个参数
打开(名称[,模式[,缓冲]])
您还可以以多种方式读取文件:
读取
readline
readlines
xreadline
(对于文件中的行,已弃用并替换为)
- 这只是一个开始。整个模块为您提供了操作文件的方法
根据文件的大小、内容类型以及您想对其执行的操作,您可能需要切换
拥有像您编写的那样的“read()”和“write()”函数对于处理小文本文件很有用,但在其他情况下可能会很麻烦
例如,如果您试图读取一个9GB的日志文件,那么使用您的想法将所有内容读入内存会在大多数当前计算机(具有4-8GB ram)上造成很多问题。如果日志文件是二进制格式的,那么处理数据时就会出现问题
由于通过链接这些命令,您可以使用一行程序轻松地读/写文件,因此,对于我来说,使用另一种更有限的方式来处理文件是毫无意义的。除了它们都可以在一行程序(如@Kindall answer)中实现之外
您的示例传递了许多选项,为特定任务呈现这些选项
def read_file(path):
with open(path) as f:
return f.read()
Open需要几个参数
打开(名称[,模式[,缓冲]])
您还可以以多种方式读取文件:
读取
readline
readlines
xreadline
(对于文件中的行,已弃用并替换为)
- 这只是一个开始。整个模块为您提供了操作文件的方法
根据文件的大小、内容类型以及您想对其执行的操作,您可能需要切换
拥有像您编写的那样的“read()”和“write()”函数对于处理小文本文件很有用,但在其他情况下可能会很麻烦
例如,如果您试图读取一个9GB的日志文件,那么使用您的想法将所有内容读入内存会在大多数当前计算机(具有4-8GB ram)上造成很多问题。如果日志文件是二进制格式的,那么处理数据时就会出现问题
由于通过链接这些命令,您可以用一行代码轻松地读/写文件,因此,对于我来说,使用另一种更有限的方法来处理文件是毫无意义的。因为它们既愚蠢又冗余。一个可以让您免于编写一行代码的函数几乎不值得拥有。。。Python经常为了清晰而牺牲简洁性。@IgnacioVazquez Abrams:这应该是一个答案,而不是注释。因为它们愚蠢且冗余。一个能让你免于编写一行代码的函数几乎不值得拥有。。。Python经常为了清晰而牺牲简洁。@IgnacioVazquez Abrams:这应该是一个答案,而不是一个评论。谢谢你清晰礼貌的回答。这就是我想要的。-1我不同意。虽然这是可行的,但我坚持认为它是邪恶的(邪恶不应被视为道德判断,而应被视为强烈的意见)。如果你养成了这个习惯,你会把自己限制在一些小脚本上,而不是打开很多运行在特定Python实现上的文件,这样你就可以按照推荐的方式编写代码,而不用thinkin