我使用文件写入操作在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列? OR
是否可以按顺序方式写入值,以便我可以将所有值都放在一个文件中?
答案 0 :(得分:2)
您可以使用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,
答案 1 :(得分:0)
作为替代方案,您可以使用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创建大量要迭代的数字列表。