SORU
12 Mayıs 2013, Pazar


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
12 Mayıs 2013, Pazar


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**

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • iNCH

    iNCH

    20 Temmuz 2009
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012