Ich versuche, eine CSV-Datei zu analysieren und die Daten nur aus bestimmten Spalten zu extrahieren.
Beispiel csv:
ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |
Ich versuche nur bestimmte Spalten zu erfassen, sagen ID
, Name
, Zip
und Phone
.
Der Code, den ich mir angesehen habe, hat mich zu der Annahme geführt, dass ich die spezifische Spalte mit der entsprechenden Nummer aufrufen kann, dh: Name
würde 2
jeder Zeile entsprechen und durchlaufen, wobei row[2]
alle Elemente in Spalte 2 erzeugt würden. Nur nicht.
Folgendes habe ich bisher getan:
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
und ich erwarte, dass dies nur die spezifischen Spalten druckt, die ich für jede Zeile haben möchte, außer es nicht, ich bekomme nur die letzte Spalte.
"rb"
ist es geeignet, an zu übergeben csv.reader
.
'rb'
markierenopen()
? sollte es nicht einfach seinr
?