2016-09-16 3 views
0

Я пытаюсь прочитать файл csv и анализировать данные и возвращать строки (start_date), только если дата предшествует 6 сентября 2010 года. Затем напечатайте соответствующие значения из строки (слов) в порядке возрастания. Я могу выполнить первую половину, используя следующее:Как печатать строки csv в порядке возрастания Python

import csv 

with open('sample_data.csv', 'rb') as f: 

read = csv.reader(f, delimiter =',') 

for row in read: 

    if row[13] <= '1283774400': 
     print(row[13]+"\t \t"+row[16]) 

возвращает правильный диапазон дата_начал и соответствующие значения столбцов слова, но они не возвращаются в порядке возрастания, который будет отображать сообщение, если все сделано правильно.

Я попытался использовать функции sort() и sorted() после создания пустого списка, чтобы добавить его в строки, но я просто не знаю, где и как включить его в существующий код, и были ужасно неудачными. Любая помощь будет принята с благодарностью.

+0

Как вы хотите отсортировать его, я имею в виду, что вы хотите отсортировать данные для значений столбцов слова? – LearningNinja

+0

Я хочу вернуть данные из столбца start_date, если дата в строках меньше или равна 6 сентября 2010 года. Затем верните данные из столбца слов, который соответствует условию. Я могу вернуть правильные строки из столбцов, но я не могу напечатать данные в порядке возрастания. Я пытаюсь использовать sort() или sorted() для печати по возрастанию, но не печатает правильные строки или столбцы. – Adam

ответ

0

Просто читать список, отфильтровать список по < date критериям и сортировать его в соответствии с 13-й строки как целое

Обратите внимание, что общая ошибка будет фильтровать, как ASCII (которые могут появиться на работу), но целочисленное преобразование является обязательным для предотвращения проблем сортировки.

import csv 

with open('sample_data.csv', 'r') as f: 
    read = csv.reader(f, delimiter =',') 
    # csv has a title, we have to skip it (comment if no title) 
    title_row = next(read) 
    # read csv and filter out to keep only earlier rows 
    lines = filter(lambda row : int(row[13]) < 1283774400,read) 

# sort the filtered list according to the 13th row, as numerical 
slist = sorted(lines,key=lambda row : int(row[13])) 

# print the result, including title line 
for row in title_row+slist: 
    #print(row[13]+"\t \t"+row[16]) 
    print(row) 
+0

При запуске этого сценария появляется сообщение об ошибке. ValueError: неверный литерал для int() с базой 10: 'start_date'. Фактический файл excel использует «start_date» в качестве своего идентификатора для столбца – Adam

+0

, который является точкой моей промаркированной строки: пропустить заголовок вроде этого: 'title_row = next (read)'. Изменили мое сообщение, так что строка заголовка принимается во внимание. –

+0

спасибо. Я добавил код, чтобы пропустить заголовок, но я получаю еще одну ошибку: Traceback (последний последний звонок): Файл «», строка 2, в print (row [13] + "\ t \ t" + строка [16]) IndexError: индекс строки за пределами диапазона (я не уверен, что это проблема с отступом или что, я считаю, что я отступы правильно, используя IDLE 2.7.10 – Adam

Смежные вопросы