从文件性能方面提取数据(子进程与文件读取)Python

时间:2016-04-27 02:20:33

标签: python file subprocess

想知道使用python从本地托管文件读取数据的最有效方法是什么。

使用子进程并只捕获文件的内容:

ssh = subprocess.Popen(['cat', dir_to_file],
                       stdout=subprocess.PIPE)
for line in ssh.stdout:
    print line

或者只是阅读文件的内容:

f = open(dir_to_file)
data = f.readlines()
f.close()
for line in data:
    print line

我正在创建一个脚本,必须阅读许多文件的内容,我想知道哪种方法在CPU使用率方面效率最高,哪个方面最快运行

这是我在stackoverflow上的第一篇文章,对格式化道歉。

由于

1 个答案:

答案 0 :(得分:0)

@ chrisd1100是正确的,逐行打印是瓶颈。经过快速实验,这是我找到的。

我在两种不同的文件大小(~100KB和~10MB)上重复运行上述两种方法(A - subprocess,B - readline)。

试验1:~100KB

subprocess: 0.05 - 0.1 seconds
readline:   0.02 - 0.026 seconds

试验2:~10MB

subprocess: ~7 seconds
readlin:    ~7 seconds

在较大的文件大小下,逐行打印成为迄今为止最昂贵的操作。在较小的文件大小上,似乎readline具有大约2倍的速度性能。暂时,我说readline更快。

这些都在Python 2.7.10,OSX 10.11.13,2.8 Ghz i7上运行。