Python csvreader отдельными строками - PullRequest
0 голосов
/ 21 января 2012

Я использую модуль CSV для Python.Я внимательно изучил Руководство по чтению и записи файлов CSV .Я хочу написать цикл, который проходит через каждую строку в файле CSV и назначает каждой строке делать разные переменные.У кого-нибудь есть идеи по этому поводу?

Я знаю, что есть .next() и .line_num, я не думал, что они подойдут в этом случае, хотя я могу ошибаться.

В настоящее время у меня есть следующий код, который распечатывает весь файл CSV:

print_csv = csv.reader(open(csv_name, 'rb'), delimiter=' ', quotechar='|')
for row in print_csv:
    print ', '.join(row)

[ EDIT ]

Теперь я в курсе,из этой ветки вопросов, что лучший способ сделать это будет зависеть от того, для чего будет использоваться первая строка.

Что я хочу сделать с первой строкой CSV-файла, это проверить, находится ли он в правильном формате.Это может включать:

  • проверку на наличие ожидаемого количества столбцов

  • проверку на наличие правильного имени заголовков столбцов

  • проверка на правильность расположения столбцов.

Ответы [ 2 ]

2 голосов
/ 21 января 2012

1.- Быстрый ответ

Вместо установки разных независимых переменных вы можете сделать:

mydict = {}
for idx, item in enumerate(reader):
    mydict['var%i' %idx] = item

тогда вы называете свою переменную как:

mydict['var0']

Или еще короче в py3k:

mydict = {'var%i' %idx : item for idx, item in enumerate(reader)}

Но в этом смысле нет особого смысла

Как сказал комментатор, это ничем не отличается от прямого:

mylist = list(reader)

, а затем

mylist[0] # instead of 'var0'

и этот вариант намного лучше.
Стратегия словаря лучше всего подходит, когда вы извлекаете ключ словаря из той же самой строки читателя. Например, если бы это было в pos pos 0,:

mydict = {item[0] : item for item in reader}

2.- Правильный ответ

Но если вам нужно просто проверить формат первой строки (возможно, чтобы рассчитать пространство, необходимое для печати), метод может быть следующим:

line = reader.next()
like_this = check_how_is_my(line)
if like_this == 'something_long':
    spaces = 23
else:
    spaces = 0

while True:
    try:
        print_with_spaces(line, spaces)
        reader.next()
    except StopIteration:
        break
0 голосов
/ 21 января 2012

Ну, вы, очевидно, можете сделать:

var1 = reader.next()
var2 = reader.next()
var3 = reader.next()
var4 = reader.next()
var5 = reader.next()

или любой другой вариант. Это не мой любимый стиль кодирования, но он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...