Как я могу проверить двойные кавычки значений в файле с разделителями трубы, используя Python? - PullRequest
1 голос
/ 27 марта 2019

У меня есть файл с разделителями канала в S3, где строки выглядят так:

123 | "val 2" | "" | """ | | val5

Я читаю поток байтов и преобразую его в словарь, используя csv.DictReader:

data_iter = stream_from_s3_utf8(s3_stream)
csv_iter = csv.DictReader(data_iter)

Когда я использую пакеты для преобразования содержимого файла в код Python, эти пакеты (разумно) выводят, что двойные кавычки являются просто индикатором того, что какое-то значение должно быть строкой, поэтому «val 2» (с буквальным двойным кавычки в файле) входит в мой словарь как строковое значение без кавычек. И пустое значение (пятое значение выше), и пара двойных кавычек (третье значение выше) попадают в мой словарь в виде пустой строки. Но мне нужно проверить цитату в моем файле, поэтому мне нужен доступ к буквальным кавычкам. (Например, третье значение выше недопустимо, но пятое - это.) Есть ли в Python способ прочитать содержимое файла, сохранив кавычки?

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вы можете управлять тем, как csv.reader и, соответственно, csv.DictReader обрабатывают кавычки, передавая параметр quoting его конструктору.Весь спектр возможностей определен в модуле csv, но здесь вам понадобится csv.QUOTE_NONE

data_iter = stream_from_s3_utf8(s3_stream)
csv_iter = csv.DictReader(data_iter,quoting=csv.QUOTE_NONE)
0 голосов
/ 27 марта 2019

Я знаю, что вы нашли ответ, но вот тот, который делает это с нуля:

f = open('filename.foo')
raw = f.read()
f.close()
data = [i.strip() for i in raw.strip('|')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...