Python ile csv csv dosyası Belirli Sütunları oku
Csv dosyası üzerinden ayrıştırmak ve sadece belirli sütunlardaki verileri ayıklamak için çalışıyorum.
< / ^ br . Csv örnek:
ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |
Yalnızca belirli sütunları, ID
, Name
, Zip
Phone
söyle yakalamak için çalışıyorum.
Kod baktım bulunuyor açtı bana inanamıyorum çağrı belirli bir sütuna göre karşılık gelen sayı, o kadar yani: Name
ki karşılık 2
ve yineleme yoluyla her satır kullanarak row[2]
ki üretmek tüm öğeler sütun 2. Sadece değil.
Şuana kadar yaptığım şey şu:
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
ve bu, benim son sütun sadece bir bardak hariç her satır için istiyorum yalnızca belirli sütunları yazdıracak bekliyorum.
CEVAP
import csv
from collections import defaultdict
columns = defaultdict(list) # each value in each column is appended to a list
with open('file.txt') as f:
reader = csv.DictReader(f) # read rows into a dictionary format
for row in reader: # read a row as {column1: value1, column2: value2,...}
for (k,v) in row.items(): # go over each column name and value
columns[k].append(v) # append the value into the appropriate list
# based on column name k
print(columns['name'])
print(columns['phone'])
print(columns['street'])
Bir dosya gibi
name,phone,street
Bob,0893,32 Silly
James,000,400 McHilly
Smithers,4442,23 Looped St.
Çıktı
>>>
['Bob', 'James', 'Smithers']
['0893', '000', '4442']
['32 Silly', '400 McHilly', '23 Looped St.']
Veya alternatif olarak, eğer sütunlar için sayısal dizin oluşturma istiyorsanız:
with open('file.txt') as f:
reader = csv.reader(f)
reader.next()
for row in reader:
for (i,v) in enumerate(row):
columns[i].append(v)
print(columns[0])
>>>
['Bob', 'James', 'Smithers']
Bu deliminator uygun örnekleme için delimiter=" "
eklemek veya değiştirmek için, ben.e 20**
Bulma öğenin dizin listesi Python içer...
Nasıl Python dosyası eklemek musunuz?...
İnsanlar neden yazma #!//bin/Python ko...
Python ile bir dize belirli karakterle...
Yeniden Python belirli bir uzunlukta b...