Tôi đang cố gắng phân tích cú pháp thông qua tệp csv và trích xuất dữ liệu từ các cột cụ thể.Đọc các cột cụ thể từ tệp csv với mô-đun csv?
Ví dụ csv:
ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |
Tôi đang cố gắng để nắm bắt các cột chỉ cụ thể, nói ID
, Name
, Zip
và Phone
.
Mã Tôi đã nhìn vào đã khiến tôi tin tôi có thể gọi các cột cụ thể bằng số tương ứng của nó, vì vậy tức là: Name
sẽ tương ứng với 2
và lặp lại qua mỗi hàng sử dụng row[2]
sẽ tạo ra tất cả các mục trong cột 2. Chỉ có nó không.
Dưới đây là những gì tôi đã làm như vậy cho đến nay:
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
và tôi hy vọng rằng điều này sẽ in ra chỉ có các cột cụ thể tôi muốn cho mỗi hàng, ngoại trừ nó không, tôi nhận được cột cuối cùng chỉ có.
tại sao ''rb'' gắn cờ thành' open() '? không nên đơn giản là 'r'? – Elazar
@Elazar: trong Python 2 (mà OP đang sử dụng) '" rb "' là thích hợp để chuyển tới 'csv.reader'. – DSM
Tại sao tệp CSV mẫu của bạn hiển thị ký tự đường ống làm dấu phân cách nhưng mã mẫu của bạn sử dụng khoảng trắng? –