2010-07-12 9 views
2

J'ai 2 fichiers csv:append contenu d'un fichier csv à un autre en utilisant python

  • output.csv
  • output1.csv

output.csv a un 5 colonnes de titres.
output1.csv a environ 40 colonnes de différents types de données.

Je dois ajouter tout le contenu de output1.csv à output.csv. Comment puis-je faire ceci?
pourrait quelqu'un s'il vous plaît me donner un indice sur la façon de s'y prendre ???
j'ai le code suivant:

reader=csv.DictReader(open("test.csv","r")) 
allrows = list(reader) 

keepcols = [c for c in allrows[0] if all(r[c] != '0' for r in allrows)] 

print keepcols 
writer=csv.DictWriter(open("output.csv","w"),fieldnames='keepcols',extrasaction='ignore') 
writer.writerows(allrows) 

    with open("test1.csv","r") as f: 
     fields=next(f).split() 
     # print(fields) 
     allrows=[] 
     for line in f: 
      line=line.split() 
      row=dict(zip(fields,line)) 
      allrows.append(row) 
      # print(row) 
     keepcols = [c for c in fields if any(row[c] != '0' for row in allrows)] 
     print keepcols 
     writer=csv.DictWriter(open("output1.csv","w"),fieldnames=keepcols,extrasaction='ignore') 
     writer.writerows(allrows) 

test.csv génère output.csv
test1.csv génère output1.csv

im essayant de voir si je peux faire les deux fichiers génèrent ma sortie dans la même fichier ..

Répondre

4

Si je comprends bien votre question, vous voulez créer un fichier CSV avec 41 colonnes - le 1 de output.csv suivi du 40 de output1.csv. Je suppose qu'ils ont le même nombre de lignes (sinon - quel est le comportement nécessaire?)

Essayez d'utiliser le module csv:

import csv 
reader = csv.reader(open('output.csv', 'rb')) 
reader1 = csv.reader(open('output1.csv', 'rb')) 
writer = csv.writer(open('appended_output.csv', 'wb')) 
for row in reader: 
    row1 = reader1.next() 
    writer.writerow(row + row1) 

Si vos fichiers csv sont formatés avec délimiteurs ou caractères spéciaux citant , vous pouvez utiliser les arguments de mot-clé optionnels pour les objets csv.reader et csv.writer. Voir Python's csv module documentation pour plus de détails ...

EDIT: Ajout du drapeau 'b', comme suggéré.

+1

-1 ** Toujours ouvrir les fichiers csv en mode binaire ** –

+0

Ajouté 'b'; Je me suis trompé. – Lior

+0

merci Lior ..... u rock ..... :))))) – newbie

1

This discussion récente ressemble beaucoup à ce que vous recherchez, sauf que l'OP là voulait concaténer les fichiers mp3.

EDIT:

import os, sys 
target = '/path/to/target' 
src1 = '/path/to/source1.csv' 
src2 = '/path/to/source2.csv' 
tf = open(target, 'a') 
tf.write(open(src1).read()) 
tf.write(open(src2).read()) 
tf.close() 

essayer ceci, cela devrait fonctionner puisque vous voulez simplement faire l'équivalent de cat src1 src2 > target de commande shell

+0

mais je suppose que les fichiers csv sont très différents des fichiers mp3 ... alors que suggérez-vous pour mon problème ?? – newbie

0

"Je dois ajouter tout le contenu de output1.csv à output.csv." ... pris littéralement cela signifierait écrire chaque rangée dans le premier fichier suivi de chaque rangée dans le deuxième fichier. Est-ce que c'est ce que tu veux??

titres de quoi? les 40 colonnes dans l'autre fichier ?? Si tel est le cas, alors en supposant que vous voulez que les titres écrits comme une rangée de têtes de colonne:

import csv 
titles = [x[0] for x in csv.reader(open('titles.csv', 'rb'))] 
writer = csv.writer(open('merged.csv', 'wb')) 
writer.writerow(titles) 
for row in csv.reader(open('data.csv', 'rb')): 
    writer.writerow(row) 
+0

non, je n'ai besoin des titres pour devenir des en-têtes de colonne ... j'ai besoin d'eux pour rester où ils sont .. je veux simplement ajouter ces 40 autres colonnes à output.csv qui selon vous est "titles.csv" – newbie

Questions connexes