Как получить сортированную функцию операторского модуля для хранения данных, чтобы я мог добавить файл? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь сохранить данные из datalist.csv в переменной «sort», чтобы я мог добавить данные в файл, однако он возвращает нулевое поле.

образец файла дляdatalist.csv is

W_A11, 2000-02, Moving average, 59.66666667, 50.92582302, 68.40751031, Injuries, Number, Assault, Validated, Whole pop, All ages, Fatal,
W_A12, 2000-02, Moving average, 1.543343121, 1.317063238, 1.769623003, Per 100,000 people, Age-standardised rate, Assault, Validated, Whole pop, All ages, Fatal,
W_F11B, 2000-02, Moving average, 64.33333333, 55.25710337, 73.40956329, Injuries, Number, Falls, Validated, Whole pop, 0-74 years, Fatal

Я не уверен, что попробовать.

infile = open("datalist.csv", "r")
    next(infile)
    for line in infile:
        line.strip("'")
        line.strip('"')
    csvfile = csv.reader(infile, delimiter=',')
    csvfile = list(csvfile)
    sort = sorted(csvfile, key= operator.itemgetter(6))
for line in sort:
   print(line)

Я ожидаю, что sort хранит данные из datalist.csv и для оператора print возвращает csv, ноорганизован шестым значением индекса.Вместо этого он возвращает нулевое поле.

1 Ответ

0 голосов
/ 15 февраля 2019

Этот цикл:

for line in infile:
    line.strip("'")
    line.strip('"')

полностью потребляет infile (и ничего не делает со строками; strip не изменяет данные на месте, и, вероятно, он не делает то, что, как вы думаете, он делаетв любом случае, он удаляет только начальные и конечные кавычки из всей строки, а не по полю).

Таким образом, когда вы достигаете:

csvfile = csv.reader(infile, delimiter=',')

reader нечего читать.

Избавиться от цикла, оставив (после нескольких дополнительных очисток, таких как использование операторов with и передача newline='' для удовлетворения csv требований к модулю):

with open("datalist.csv", newline='') as infile:
    csvfile = csv.reader(infile, delimiter=',')
    next(csvfile)
    sort = sorted(csvfile, key=operator.itemgetter(6))
for line in sort:
    print(line)

, и он долженработа.

...