2014-07-16 169 views
0

我必須將大量數據寫入帶有成千上萬行和列的大製表符分隔文件。什麼是更好的方法:寫入大文件:打開一次,或重新打開每個寫入事件?

  1. 在開始時使用with open(outfile,"w") as x:,然後在計算後將每個長行寫入文件。
  2. 計算每一行,並在計算完之後立即追加它,每行後再次調用with open(outfile, "a") as x:,並在每行後關閉文件。

PS:with open的內存使用率是否超過open

+0

爲什麼不分析它並找出答案? – jonrsharpe

+1

使用'open..' ususally適合我。您不必擔心關閉它,也無需每次打開它 – user2963623

回答

2

一次又一次地重新打開同一個文件顯然需要更多的時間:

[email protected]:~/Work/playground$ python opentest.py 
each : 
11.1244959831 
once : 
0.124312162399 
[email protected]:~/Work/playground$ cat opentest.py 

def each(data): 
    for whatever in data: 
     with open("opentest-each.dat", "a") as f: 
      f.write(whatever) 

def once(data): 
    with open("opentest-once.dat", "a") as f: 
     for whatever in data: 
      f.write(whatever) 

def main(): 
    import timeit 

    t1 = timeit.Timer("each(data)", "from opentest import each; data=map(str, range(10000))") 
    print "each : " 
    print t1.timeit(100) 

    t2 = timeit.Timer("once(data)", "from opentest import once; data=map(str, range(10000))") 
    print "once : " 
    print t2.timeit(100) 

if __name__ == "__main__": 
    main() 

WRT /內存使用情況,使用with open(...)不應該讓任何明顯的差異(如果它使在所有的任何區別)。

現在請注意,如果您的代碼需要作爲命令行腳本運行,最好的解決方案是寫入sys.stdout並使用shell將stdout重定向到文件。