Re: [問題] 將list快速寫入檔案的方式?
: with open('123.txt') as fi, open('456.txt', 'w') as fo:
: for _ in xrange(startindex): # 跳過 startindex 行
: fi.next()
: for _ in xrange(endindex - startindex):
: fo.write(fi.readline())
: 我不確定後面的方法會不會比較快, 但至少比較省記憶體(不用整個檔讀進來)
因為不用把整個檔案讀進記憶體,在檔案大的時候肯定會比 readlines() 快不少
另外,我發現如果用 itertools + writelines 的話,可以再快一些
實驗方法:
1. 生成檔案:
n = 2 * 10 ** 7
for _ in xrange(n):
print _
2. 分別用下列的 main 函數來讀檔、寫檔
def main(i, o):
with open(i) as fi, open(o, 'w') as fo:
fo.writelines(itertools.islice(fi, 30, 1500000))
def main(i, o):
with open(i) as fi, open(o, 'w') as fo:
map(fo.write, itertools.islice(fi, 30, 1500000))
def main(i, o):
with open(i) as fi, open(o, 'w') as fo:
for _ in xrange(30):
fi.readline()
# fi.next() or next(fi) will cause ValueError on next fi.readline()
for _ in xrange(1500000 - 30):
fo.write(fi.readline())
3. Result:
https://imgur.com/1RkWRFC

可以看到 writelines + itertools 最快, map + write + itertools 次之
不過很神奇的是用 map 時,記憶體的使用量高了不少。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 72.14.230.41
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1457409261.A.DDE.html
推
03/08 18:20, , 1F
03/08 18:20, 1F
→
03/09 01:58, , 2F
03/09 01:58, 2F
→
03/09 01:58, , 3F
03/09 01:58, 3F
→
03/09 09:55, , 4F
03/09 09:55, 4F
→
03/09 09:55, , 5F
03/09 09:55, 5F
→
03/09 09:56, , 6F
03/09 09:56, 6F
推
03/09 11:13, , 7F
03/09 11:13, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章