2010-07-09 5 views
2

Je vais vous expliquer mon problème tout:
J'ai 2 fichiers csv:ajouter une colonne particulière d'un fichier csv à un autre en utilisant python

  • projet table.csv (a environ 50 colonnes)
  • interaction matrix.csv (a environ 45 colonnes)

Je veux ajouter la chaîne dans col[43] du projet table.csv avec chaîne dans col[1] d'interaction matrix.csv avec un point (.) entre les deux chaînes e

suivant,

  • interaction matrix.csv a un ensemble d'en-têtes ..
  • son 1er col aura maintenant la chaîne ajoutée après avoir fait ce que je l'ai mentionné ci-dessus
  • tous les autres colonnes n'ont que 0 et 0
  • Je suis supposé extraire seulement les colonnes avec 1 de cette interaction-matrix.csv et le copier dans un nouveau fichier csv ... (avec la première colonne intacte)

c'est le code que je suis venu avec ...

Je reçois une erreur avec la ligne keepcols ...

import csv 
reader=csv.reader(open("project-table.csv","r")) 
writer=csv.writer(open("output.csv","w"),delimiter=" ") 
for data in reader: 
     name1=data[1].strip()+'.'+data[43].strip() 
     writer.writerow((name1, None)) 


reader=csv.DictReader(open("interaction-matrix.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("output1.csv","w"),fieldnames='keepcols',extrasaction='ignore') 
writer.writerows(allrows) 

c'est l'erreur que je reçois:

Traceback (most recent call last): 
    File "prg1.py", line 23, in ? 
    keepcols = [c for c in allrows[0] if all([r[c] != '0' for r in allrows])] 
NameError: name 'all' is not defined 

La table de projet et la matrice d'interaction ont les mêmes données dans leurs 1ères colonnes respectives. J'ai donc simplement ajouté col [43] de prj-table à col [1] de la même table ...

+0

toute aide avec le code sera grandement appréciée ... – totallyignorant

+2

quelle version de python utilisez-vous? 'all' a été ajouté dans python-2.5. Vous devez mettre à jour au moins à cette version, ou même mieux à la dernière stable 2.7 – SilentGhost

+0

ok je viens de comprendre que j'utilise python 2.3 ... je vais changer ma version immédiatement – totallyignorant

Répondre

1

Modifiez votre question pour afficher le message d'erreur que vous obtenez. Mise à jour: NameError signifie probablement que vous utilisez une (ancienne) version de Python (lequel?) Sans all() ou (vous avez utilisé all comme nom de variable et ne montrez pas le code exact que vous RAN)

Note: ouverte les deux fichiers en mode binaire ("rb" et "wb") respectivement.

Vous dîtes "Je veux ajouter la chaîne dans la colonne [43] de project-table.csv avec la chaîne dans la colonne [1] d'interaction-matrix.csv avec un point (.) Entre les deux chaînes" CEPENDANT vous utilisez col [2] (pas col [1]) de project-table.csv (pas interaction-matrix.csv, que vous n'avez pas ouvert à ce stade).

+0

ok voici la chose ... projet table et interaction-matrice ont tous les deux les mêmes données dans leurs premières colonnes respectives .. donc je viens d'ajouter col [43] de prj-table à col [1] de la même table ... – totallyignorant

+0

pas ok - Editer votre question avec ces faits. –

+0

J'ai fait l'édition – totallyignorant

Questions connexes