Чтение в CSV-файлах с вложенными символами новой строки

#python #file #csv

#python #файл #csv

Вопрос:

В настоящее время я считываю данные из csv-файла и ввожу токены и их определения в словарь. Код работает нормально, пока не попадет в место, где данные в CSV-файле выглядят следующим образом:

 "Token000nip addressntesttestest"
  

Вот мой код на данный момент:

 for line in f:
        if "Token" in line and re.search("Tokend", line):
            commaIndex = line.index(",", line.index("Token"))
            csvDict[line[line.index("Token"): commaIndex]] = line[commaIndex   1: line.index(",", commaIndex   1)]
  

Комментарии:

1. docs.python.org/3/library/csv.html#module-csv должно помочь. но это трудно проверить, если вы не предоставляете немного больше контекста для вашего ввода csv.

2. Я думаю, причина проблемы в том, что вы читаете файл построчно, и все же некоторые значения в вашем файле также содержат символ новой строки ( n ), как в случае с приведенным вами примером.

3. Если в полях есть новые строки и вокруг полей нет кавычек, как вы узнаете, когда заканчивается строка? какой разделитель он использует для строк? Было бы полезно показать несколько строк образца csv.

Ответ №1:

Используйте это:

 import csv

data={}
with open('your_file.csv') as csv_file:
    reader=csv.reader(csv_file, skipinitialspace=True, quotechar="'")
    for row in reader:
        data[row[0]]=row[1:]

print(data)
  

Я рекомендую вам взглянуть на документацию по CSV-модулю

Комментарии:

1. Я думал об использовании этого, но он считывает данные противоположным образом, который я настроил. (читается вертикально, а не горизонтально или наоборот, я не могу вспомнить). Есть ли способ изменить способ чтения?

2. Ну, я не знаю, есть ли что-нибудь подобное (AFAIK, это не так). Но я думаю, что в стандартном csv каждая строка представляет собой запись, и я не совсем понимаю, почему вы хотели бы настроить свой файл другим способом