J'essaie d'analyser un fichier csv et d'extraire les données de certaines colonnes seulement.
Exemple csv :
ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |
J'essaie de capturer uniquement des colonnes spécifiques, par exemple ID
, Name
, Zip
et Phone
.
Le code que j'ai regardé m'a conduit à croire que je peux appeler la colonne spécifique par son numéro correspondant, c'est-à-dire : Name
correspondrait à 2
et en itérant à travers chaque ligne en utilisant row[2]
produirait tous les éléments de la colonne 2. Mais ce n'est pas le cas.
Voici ce que j'ai fait jusqu'à présent :
import sys, argparse, csv
from settings import *
# command arguments
parser = argparse.ArgumentParser(description='csv to postgres',\
fromfile_prefix_chars="@" )
parser.add_argument('file', help='csv file to import', action='store')
args = parser.parse_args()
csv_file = args.file
# open csv file
with open(csv_file, 'rb') as csvfile:
# get number of columns
for line in csvfile.readlines():
array = line.split(',')
first_item = array[0]
num_columns = len(array)
csvfile.seek(0)
reader = csv.reader(csvfile, delimiter=' ')
included_cols = [1, 2, 6, 7]
for row in reader:
content = list(row[i] for i in included_cols)
print content
et je m'attends à ce que cela imprime uniquement les colonnes spécifiques que je veux pour chaque ligne, mais ce n'est pas le cas, je n'obtiens que la dernière colonne.
1 votes
pourquoi
'rb'
pouropen()
? cela ne devrait-il pas être simpler
?7 votes
@Elazar : dans Python 2 (que l'OP utilise)
"rb"
est approprié pour être transmis àcsv.reader
.0 votes
Pourquoi votre exemple de fichier CSV indique-t-il le caractère pipe comme délimiteur alors que votre exemple de code utilise un espace ?
2 votes
@KellyS.French J'ai pensé que cela aiderait à visualiser les données pour les besoins de cette question.