2013-11-28 2 views
0

У меня есть файл csv с большим количеством данных, 22 столбца и 10000 строк. Первая строка - это заголовки, а все остальные строки - это данные. Я читал из файла. (Просто прочитайте, я не хочу менять исходный файл) Теперь я хочу уменьшить количество cols и сохранить только 3 cols по названию названия и сохранить его. Порядок перевалы могут быть изменения из файла в файл, иногда цв «LUX» будет Col номер 5, а иногда и в Col номер 20, или 8, и т.д .. До сих пор я получил это:Как уменьшить матричные столбцы в python?

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 

Я понял, что строка, подобная этой, даст всю строку на каждой итерации, так что во второй итерации она будет всего лишь данными второй строки. Мне нужно как-то использовать 2 петли, я думаю, но не знаю, как именно.

спасибо.

ответ

1

Вы можете использовать list.index в строке заголовка, чтобы найти индекс различных заголовков.

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]) 
+0

hcwhsa Спасибо лота людей! Только то, что мне нужно! – shlomi

0

Это, безусловно, работа для специализированного csv модуля класса csv.DictReader, который использует первую строку документа, чтобы выяснить, какие имена Колума являются, а затем возвращает один словарь в строку.

Пример:

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']) 
Смежные вопросы