2016-03-24 25 views
2

listesindeki bir listeye nasıl dönüştürebilirim? Csv dosyasını her bir liste için sütun değerleri olan bir liste listesine dönüştürebilmek istiyorum. Örneğin:Bir csv dosyasını python

6,2,4 
5,2,3 
7,3,6 

[[6,5,7],[2,2,3],[4,3,6]] 

içine Ive sadece dosyayı açmak başardı ve sadece satır halinde

with open(input,'rb') as csvfile: 
     csv_file = csv.reader(csvfile) 

     header = csv_file.next() 

     raw_data = csv_file 
+1

http://stackoverflow.com/questions/16503560/read-specific-columns-from-csv-file-with-python-csv – msvalkon

+0

CSV açık olan alist = [] ('/ Kullanıcılar/YYY/Masaüstü/Workbook1.csv', 'rU' f gibi): okuyucu = csv.reader (f) okuyucu satır için : aList.append (satır) baskı alist # [[ '6' '2', '4'], ['5', '2', '3'], ['7', '3', '6']] – Arun

+0

çıktı sütunlar tarafından düzenlenmelidir [[6] , 5,7], [2,2,3], [4,3,6]] – Kyuu

cevap

7

emin o öğelerin sabit bir sayı olarak yazdırmadan başarıya sahip Her satırda, zip:

import csv 

with open('test.csv') as csvfile: 
    rows = csv.reader(csvfile) 
    res = list(zip(*rows)) 
    print(res) 
    # [('6', '5', '7'), ('2', '2', '3'), ('4', '3', '6')] 

Ya durumda, üst üste öğelerin farklı sayıdır:

6,2,4 
5,2 
7 

Kullanım zip_longest ve filter:

import csv 
from itertools import zip_longest 

with open('test.txt') as csvfile: 
    rows = csv.reader(csvfile) 

    res = list(zip_longest(*rows)) 
    print(res) 
    # [('6', '5', '7'), ('2', '2', None), ('4', None, None)] 

    res2 = [list(filter(None.__ne__, l)) for l in res] 
    print(res2) 
    # [['6', '5', '7'], ['2', '2'], ['4']] 
+1

veya python2.x kullanıyorsanız itertools'tan izip ve eğer sizlerse Gerçekten bir liste İHTİYACINIZ :-) – izak

1

Muhtemelen ilk listelerin listesi içine okuyarak başlayabilir:

from csv import reader as csvreader 
with open(input, 'r') as fp: 
    reader = csvreader(fp) 
    li = list(reader) 

Sonra yeni bir diziye doğrayın, eminim itertools ile başka hileler var, ama ben bu ile geldi:

from itertools import count 
def my_gen(): 
    for i in count(): 
     try: 
      yield [x[i] for x in li] 
     except IndexError: 
      break 

Şimdi jeneratörü istediğiniz sütunları satır olarak alacak bir listeye dönüştürebilirsiniz.

list(my_gen()) 
+1

@ germn'nin cevabı benimkinden daha iyidir. zip/izip esasen my_gen'imin ne yaptığını yapar. – izak

İlgili konular