性能权衡从一个文件读取,执行操作和写入另一个文件

时间:2014-07-14 18:31:08

标签: python performance file io

我有一个Python脚本,它从源文件中读取一行数据,对该数据执行一组计算,并将这些计算的结果写入输出文件。该脚本当前编码为从源文件一次读取一行,直到到达源文件的末尾。

我可以通过从源文件中读取多行,执行计算并将结果写入输出文件来改善脚本的执行时间吗?

我是否因为拥有大量读/写实例而受到性能影响?

由于更改代码的困难,我问的问题不是进行测试。

2 个答案:

答案 0 :(得分:1)

在大多数情况下,在内存中执行操作将具有比相同操作更好的性能,但具有磁盘访问权限。因此,我可以看到与这种情况相关的两个选项可能如下所示。

lines = []
with open("sourcefile.txt", 'r') as fd:
    lines = fd.readlines()

# Do work to each line.
for line in lines:
    doWork(line)

with open('sourcefile.txt', 'r') as fd:
    line = fd.read()
    doWork(line)

第一个示例代码应该运行得更快,因为一旦所有文件IO完成,所有工作都在内存中完成并独立于文件IO。

答案 1 :(得分:0)

只有通过实际测量才能回答这个问题。

您应该创建一个简单的测试场景,它将在不进行实际计算的情况下读取和写入类似类型和大小的文件。

您可以进行分析和检查,花费在I / O操作上的时间以及处理内容的程度。结果可能是,即使I / O以光速运行,也不会显着提高性能。

在没有测量时间的情况下,人们只能猜测并且估计是:

  • 如果您使用默认缓冲,则不会发现很大差异。
  • 以防万一,一次读取更多行会加快处理速度,你可以为文件操作设置更大的缓冲区。即使逐行处理,您的加工代码也很简单,这可以加快整个过程。

就个人而言,我宁愿保留当前简单的逐行处理,除非性能和收益真的很重要。