Próbuję przeanalizować plik csv i wyodrębnić dane tylko z określonych kolumn.
Przykład CSV:
ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |
Staram się uchwycić tylko konkretne kolumny, powiedzmy ID, Name, Zipi Phone.
Kod, na który patrzyłem, doprowadził mnie do przekonania, że mogę wywołać określoną kolumnę za pomocą odpowiadającego jej numeru, więc np .: Namebędzie odpowiadać 2i iterowanie przez każdy wiersz przy użyciu row[2]spowoduje wyświetlenie wszystkich elementów w kolumnie 2. Tylko tak nie jest.
Oto, co zrobiłem do tej pory:
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
i spodziewam się, że to wydrukuje tylko określone kolumny, które chcę dla każdego wiersza, z wyjątkiem tego, że nie, otrzymuję tylko ostatnią kolumnę.
"rb"jest odpowiednie do przekazania csv.reader.
'rb'flagaopen()? czy nie powinno to być proster?