我越來越多地使用python而不是perl,但有一個問題:總是當我想處理大型文件(> 1GB)時,逐行python似乎需要一段時間才能完成perl在一小部分時間內完成的工作。然而,網絡上的一般看法似乎是python應該至少和文本處理一樣快。所以我的問題是我做錯了什麼?Python比大文件慢perl:我做錯了什麼?
實施例:
逐行讀取一個文件中的行,分割線在每一個片和所述第二項添加到列表中。 我的Python的解決方案將是這個樣子:
with open() as infile:
for line in infile:
ls = line.split("\t")
list.append(ls[1])
Perl代碼應該是這樣的:
open(my $infile,"<",file_path);
while(my $line=<$infile>){
my @ls = split(/\t/,$line);
push @list, $ls[1]
}
close($infile)
有什麼辦法來加快這個嗎?
而且要說清楚:我不想開始平常的「[填寫腳本語言A的名稱]比so [填充腳本語言B]好得多」的線程。我想更多地使用python,這對我的工作是一個真正的問題。
有什麼建議嗎?
一旦你擁有它,你想用'list'做什麼? Python對生成器和迭代器有很好的支持,你可以在追加到全局變量的內部產生ls [1]'。 –
我們在這裏談論的是什麼樣的性能差異? –
我通過一個包含1000萬行「foo \ tbar \ tbaz \ tbiff \ n」的簡單CSV文件,在[等效的Perl代碼](https://gist.github.com/schwern/0e81307f0be0cce37aad9c0ac5fd3045)上運行您的代碼, Python代碼運行速度快兩倍。你能展示你的等價的Perl代碼嗎?另外,你的代碼不是真實的,'open'缺少參數。你能向我們展示* real *代碼嗎?最後,爲什麼你認爲這些代碼是性能問題? – Schwern