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

Python 从一个文件读取、执行操作和写入另一个文件的性能权衡,python,performance,file,io,Python,Performance,File,Io,我有一个Python脚本,它从源文件读取一行数据,对该数据执行一组计算,并将计算结果写入输出文件。脚本当前编码为从源文件一次读取一行,直到到达源文件的末尾 我可以通过从源文件读取多行代码、执行计算并将结果写入输出文件来缩短脚本的执行时间吗 大量读/写实例是否会影响性能 我问这个问题,而不是执行测试,因为更改代码很困难。这样的问题只能通过实际测量来回答 您应该创建简单的测试场景,在不进行实际计算的情况下读取和写入类似类型和大小的文件 您可以进行分析和检查,您在I/O操作上花费了多少时间,以及在处理

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

我可以通过从源文件读取多行代码、执行计算并将结果写入输出文件来缩短脚本的执行时间吗

大量读/写实例是否会影响性能


我问这个问题,而不是执行测试,因为更改代码很困难。

这样的问题只能通过实际测量来回答

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

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

如果不测量时间,人们只能猜测,我的估计是:

  • 如果使用默认缓冲,则不会看到太大的差异
  • 在这种情况下,一次读取更多行将加快处理速度,您可以尝试为文件操作设置更大的缓冲区。这可以加快处理过程,即使逐行处理,也可以使处理代码保持简单

就我个人而言,我更愿意保留当前的简单逐行处理,除非性能和收益非常显著。

在大多数情况下,在内存中执行操作比在磁盘访问中执行相同操作的性能更好。因此,我可以看到与这种情况相关的两种选择可能是这样的

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

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


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

lines=fd.readlines()也可以写成
ilnes=list(fd)
。但是你的方式很好。
with open('sourcefile.txt', 'r') as fd:
    line = fd.read()
    doWork(line)