[英]write 5M data to a csv file using file write operation
我正在使用文件寫入操作在CSV文件的單個列中寫入一些數據。 我只能在1048576行中寫入值。 我有500萬個整數數據值,並且希望將其保存在單個CSV文件中。 下面是我的代碼
with open(path, 'w') as fp:
for i in range(0,len(values)):
fp.write(values[i] + '\n')
fp.close()
是否可以繼續將1048576行之后的值寫入CSV文件的第3/4列? 要么
是否可以按順序寫入值,以便我可以將所有值保存在一個文件中?
您可以使用itertools.izip_longest
將值“分類”為“列”,然后使用csv
模塊將這些行寫入文件。 例如:
import csv
from itertools import izip_longest
N = 5 # adapt as needed
values = range(1, 23) # use real values here
with open(path, 'wb') as fout:
csvout = csv.writer(fout)
rows = izip_longest(*[iter(values)] * N, fillvalue='')
csvout.writerows(rows)
這將為您提供以下輸出:
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
21,22,,,
您還可以“轉置”數據,以使數據“反過來運行”,例如:
import csv
from itertools import izip_longest, izip
N = 5 # adapt as needed
values = range(1, 23) # use real values here
with open(path, 'wb') as fout:
csvout = csv.writer(fout)
rows = izip_longest(*[iter(values)] * N, fillvalue='')
transposed = izip(*rows)
csvout.writerows(transposed)
這將為您提供:
1,6,11,16,21
2,7,12,17,22
3,8,13,18,
4,9,14,19,
5,10,15,20,
或者,可以使用islice
為您提供所需的每行列數,如下所示:
from itertools import islice
import csv
path = 'output.txt'
values = range(105) # Create sample 'values' data
columns = 10
ivalues = iter(values)
with open(path, 'wb') as fp:
csv_output = csv.writer(fp)
for row in iter(lambda: list(islice(ivalues, columns)), []):
csv_output.writerow(row)
給您以下內容:
0,1,2,3,4,5,6,7,8,9
10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25,26,27,28,29
30,31,32,33,34,35,36,37,38,39
40,41,42,43,44,45,46,47,48,49
50,51,52,53,54,55,56,57,58,59
60,61,62,63,64,65,66,67,68,69
70,71,72,73,74,75,76,77,78,79
80,81,82,83,84,85,86,87,88,89
90,91,92,93,94,95,96,97,98,99
100,101,102,103,104
請注意,在您的示例中,應將range
轉換為xrange
以避免Python創建大量的要迭代的數字列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.