Mam plik CSV z dużą ilością danych, 22 Cols i 10000 rzędów. Pierwszy wiersz to tytuły, a wszystkie inne wiersze są danymi. Czytałem z pliku. (Właśnie przeczytaj, nie chcę zmieniać oryginalnego pliku) Teraz chcę zmniejszyć liczbę COLS i zaoszczędzić tylko 3 COLS, według nazwy tytułu i zapisz ją. Kolejność COLS można zmienić z pliku do pliku, czasami "Lux" COL będzie w COL Numer 5, a czasami w COL nr 20 lub 8 itp. Do tej pory mam to:

with open('test.csv', 'rb') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',', quotechar='|') # open the csv file

medianGoodPixels = [] #vector to pixels
Lux = [] #vector to LUX
sdVer = [] # vector to the version
NewCsvTable = [] #will be a matrix with 3 cols, LUX, pixels, and version

for row in spamreader:
    if row == "LUX": 
         #Here I'm stuck

Uświadomiłem sobie ten rząd, da cały wiersz w każdej iteracji w drugiej iteracji, będzie to tylko dane drugiego rzędu. Myślę, że w jakiś sposób użyłem 2 pętli, ale nie wiem, jak dokładnie.

Dziękuję Ci.

0
shlomi 28 listopad 2013, 13:49

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć list.index w wierszu nagłówka, aby znaleźć indeks różnych nagłówków.

with open('test.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='|') # open the csv file
    medianGoodPixels = [] #vector to pixels
    Lux = [] #vector to LUX
    sdVer = [] # vector to the version
    NewCsvTable = [] #will be a matrix with 3 cols, LUX, pixels, and version
    header = next(spamreader)  #Returns the header 
    lux_col, pixel_col, version_col = header.index('LUX'), header.index('pixel'),\
                                      header.index('version')

    #Now iterate over rest of the rows. 
    for row in spamreader:
        Lux.append(row[lux_col])
        sdVer.append(row[version_col])
        medianGoodPixels.append(row[pixel_col])  
1
Ashwini Chaudhary 28 listopad 2013, 09:55

Jest to zdecydowanie praca dla specjalistycznego csv klasa modułu csv.DictReader, który używa pierwszego wiersza dokumentu, aby dowiedzieć się, co są nazwy Colum, a następnie zwraca jeden słownik na wiersz.

Przykład:

Lux, sdVer, medianGoodPixels = [], [], []
with open('test.csv', 'rb') as csvfile:
    csv_reader = csv.DictReader(csvfile, delimiter=',', quotechar='|')
    for dict_row in csv_reader:
        Lux.append(dict_row['LUX'])
        sdVer.append(dict_row['version'])
        medianGoodPixel.append(dict_row['pixel'])
0
Joël 28 listopad 2013, 10:57