簡體   English   中英

使用文件寫入操作將5M數據寫入CSV文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM