2015-09-08 3 views
0

У меня есть файл csv, который мне нужно выбрать определенные строки. Для меня легко удалить AGE и MEAN WEIGHT, потому что эти имена одинаковы в любом файле.Выбор строк в файле csv с переменным числом столбцов

ID,AGE,HEIGHT,MEAN WEIGHT,20-Nov-2002,05-Mar-2003,09-Apr-2003,23-Jul-2003 1,23,1.80,80,78,78,82,82 2,25,1.60,58,56,60,60,56 3,20,1.90,100,98,102,98,102

ID,HEIGHT,20-Nov-2002,05-Mar-2003,09-Apr-2003,23-Jul-2003 1,1.80,78,78,82,82 2,1.60,56,60,60,56 3,1.90,98,102,98,102

я этот код

import csv 
out= open("C:/Users/Pedro/data.csv") 
rdr= csv.reader(out) 
result= open('C:/Users/Pedro/datanew.csv','w') 
wtr= csv.writer (result,delimiter=',',lineterminator='\n') 
for row in rdr: 
    wtr.writerow((row[0], row[2], row[4],row[5],row[6],row[7])) 
out.close() 
result.close() 

но моя трудность заключается выбрать все столбцы, которые имеют даты. Количество столбцов дат может быть переменной. Решение может заключаться в обнаружении символьной строки [4]

ответ

1

Я не уверен на 100%, что вы спрашиваете, но вот сценарий, который может делать то, что вы хотите, чтобы воспроизвести файл с помощью все неизвестное число столбцов дат, плюс ваши столбцы 0 и 2 (ID & HEIGHT):

import csv 

with open('data.csv') as infile: # Use 'with' to close files automatically 
    reader = csv.reader(infile) 
    headers = reader.next() # Read first line 

    # Figure out which columns have '-' in them (assume these are dates) 
    date_columns = [col for col, header in enumerate(headers) if '-' in header] 

    # Add our desired other columns 
    all_columns = [0, 2] + date_columns 

    with open('new.csv', 'w') as outfile: 

     writer = csv.writer(outfile, delimiter=',', lineterminator='\n') 

     # print headers 
     writer.writerow([headers[i] for i in all_columns]) 

     # print data 
     for row in reader: # Read remaining data from our input CSV 
      writer.writerow([row[i] for i in all_columns]) 

ли это помощь?

+0

Отлично. Спасибо, что помогли мне;) –

+0

Добро пожаловать, мое удовольствие. Пожалуйста, не забывайте принимать ответы, которые решают ваши проблемы, поэтому вопрос удаляется с «неотвеченной» страницы. – Symmitchry