Mes données source sont dans un fichier TSV, 6 colonnes et plus de 2 millions de lignes.
Voici ce que j'essaie d'accomplir:
Ci-dessous est ce que je suis venu avec.
Ma question: est-ce un moyen efficace de le faire? Il semble que cela pourrait être intensif lors d'une tentative sur 2 millions de lignes.
Tout d'abord, j'ai créé un fichier séparé avec un onglet échantillon, que j'ai appelé "échantillon.txt". C'est basique et n'a que quatre lignes:
Row1_Column1 Row1-Column2 Row1-Column3 Row1-Column4 2 Row1-Column6
Row2_Column1 Row2-Column2 Row2-Column3 Row2-Column4 3 Row2-Column6
Row3_Column1 Row3-Column2 Row3-Column3 Row3-Column4 1 Row3-Column6
Row4_Column1 Row4-Column2 Row4-Column3 Row4-Column4 2 Row4-Column6
alors j'ai ce code:
import csv
with open('sample.txt','r') as tsv:
AoA = [line.strip().split('\t') for line in tsv]
for a in AoA:
count = int(a[4])
while count > 0:
with open('sample_new.csv','ab') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',')
csvwriter.writerow([a[2], a[3]])
count = count - 1
Vous devriez utiliser le module csv
pour lire le fichier de valeurs séparé par des tabulations. Ne pas lisez-le en mémoire en une fois. Chaque ligne que vous lisez contient toutes les informations dont vous avez besoin pour écrire des lignes dans le fichier CSV de sortie, après tout. Gardez le fichier de sortie ouvert pendant tout le processus.
import csv
with open('sample.txt','rb') as tsvin, open('new.csv', 'wb') as csvout:
tsvin = csv.reader(tsvin, delimiter='\t')
csvout = csv.writer(csvout)
for row in tsvin:
count = int(row[4])
if count > 0:
csvout.writerows([row[2:4] for _ in xrange(count)])
ou, en utilisant le module itertools
pour répéter l'opération avec itertools.repeat()
:
from itertools import repeat
import csv
with open('sample.txt','rb') as tsvin, open('new.csv', 'wb') as csvout:
tsvin = csv.reader(tsvin, delimiter='\t')
csvout = csv.writer(csvout)
for row in tsvin:
count = int(row[4])
if count > 0:
csvout.writerows(repeat(row[2:4], count))