2015-10-15 88 views
0

使用文件寫入操作將一些數據寫入CSV文件的單個列中。我只能在1048576行中寫入值。我有500萬個整數數據值,我希望它被保存在一個CSV文件中。下面是我的代碼使用文件寫入操作將5M數據寫入csv文件

with open(path, 'w') as fp: 
    for i in range(0,len(values)): 
     fp.write(values[i] + '\n') 
    fp.close() 
  • 是否有可能/後1048576行繼續寫下去值3 CSV文件的第4列?或

  • 是否有可能以順序方式寫入值,以便我可以在單個文件中具有所有值?

+0

'close()'調用是不必要的。這就是'已經'在這裏已經做了。爲什麼索引'i'而不是'_directly_迭代'values'項呢? – BlackJack

回答

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, 
+0

沒有csv模塊可能嗎?我的意思是用文件寫作? – PythonDev

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 

注意,在你的榜樣,你應該轉換rangexrange,以避免Python創建一個龐大的數字列表進行迭代。