使用文件写入操作将5M数据写入csv文件

时间:2015-10-15 11:37:14

标签: python python-2.7 csv

我使用文件写入操作在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

  • 是否可以按顺序方式写入值,以便我可以将所有值都放在一个文件中?

2 个答案:

答案 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创建大量要迭代的数字列表。