J'essaie d'analyser un fichier csv et d'extraire les données de colonnes spécifiques uniquement.
Exemple csv:
ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |
Je suis en train de saisir uniquement des colonnes spécifiques, par exemple ID
, Name
, Zip
etPhone
.
Le code que j'ai regardé m'a amené à croire que je peux appeler la colonne spécifique par son numéro correspondant, donc c'est-à-dire: Name
correspondrait à2
et itérer à travers chaque ligne en utilisant row[2]
produirait tous les éléments de la colonne 2. Seulement, 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 n'imprime que les colonnes spécifiques que je veux pour chaque ligne sauf que ce n'est pas le cas, je reçois la dernière colonne uniquement.
"rb"
est approprié pour le passage csv.reader
.
'rb'
signaleropen()
? ne devrait-il pas être simpler
?