У меня есть файл, который я пытаюсь прочитать в Pandas DataFrame, в котором есть столбец со сложной строкой. Строка содержит вывод HTML и выглядит примерно так:
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD HTML 4.0 Transitional//EN\\">\n', '<html>\n', '<head>\n', '<meta http-equiv=\\"Content-Type\\" content=\\"text/html; charset=UTF-8\\">\n', '<meta charset=\\"utf-8\\">\n', '<title>An Amazon.com Gift Card you sent has been redeemed</title>\n', '</head>\n', '<body>\n',
До сих пор я пробовал следующее:
df = pd.read_csv("<filename>",nrows = 50)
Что возвращает следующий .head()
:
Я пробовал использовать "escapechar= "
, но, должно быть, неправильно понял синтаксис.
Для ясности, эта HTML-строка будет частью общего CSV-файла, а указанная выше строка будет только одной ячейкой данной строки. Ниже приведен образец строки файла CSV. В этом CSV-файле обслуживаются 24 столбца:
"241279","EMAIL_ADDRESS","EMAIL_ADDRESS","1607be7d4f2d66af","<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"URL\">
<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
<meta charset=\"utf-8\">
<title>An Amazon.com Gift Card you sent has been redeemed</title>
</head>
<body>
<img width=\"1\" height=\"1\" src=\"URL\">
Greetings from Amazon.com,<br><br>
We wanted to let you know you that an Amazon.com Gift Card you sent has been redeemed.<br><br>
The gift card was emailed by Amazon to EMAIL_ADDRESS on DATE.<br><br>
Details:<br><br>
Order # NUMBER<br>
Sent to: EMAIL_ADDRESS<br>
Date sent: DATE<br>
Message: Here is a \"thank you\" for ... <br><br>
Please note: This email was sent from a notification-only address that cannot accept incoming email.
Please do not reply to this message.<br><br>
<img width=\"1\" height=\"1\" src=\"URL\">
</body>
</html>
","DATE 01:47:58","gmail","email",,,"An Amazon.com Gift Card you sent has been redeemed","DATE","DATE","f","23",,"EMAIL_ADDRESS","EMAIL_ADDRESS",,"f","EMAIL_ADDRESS","EMAIL_ADDRESS","9","f"
Хорошее замечание, поэтому внесены поправки.
как вы генерируете этот CSV? Не похоже, что он был сгенерирован должным образом. quotechar не должен находиться в самой ячейке. Можете ли вы сгенерировать этот CSV с другим quotechar?
Образец выглядит как дамп .readlines()
файла CSV, а не как содержимое самого файла CSV. Какое содержимое вырезано и вставлено прямо из файла .CSV?
@RickyKim, к сожалению, я не являюсь генератором этого файла, иначе было бы намного чище.
@MarkTolonen, CSV-файл слишком велик для отображения в текстовых редакторах, которые я пробовал, поэтому я выбрал подход .readlines (). Всего около 77 ГБ. Однако я открыт для новых подходов к этому.
Сделайте что-нибудь вроде print(open('some.csv',encoding='utf8').read(1024))
и дайте нам этот контент.
@MarkTolonen - так исправлено.
Поскольку quotechar
по умолчанию для pd.read_csv
- "
, вам следует использовать quotechar = "'"
.
Это отличная идея, но, к сожалению, выход .head()
не изменился.
каков ваш ожидаемый результат?
DataFrame имеет следующие заголовки столбцов: [id, author_id, author_name, message_id, message]. Строку html необходимо вводить как одну ячейку в последнем столбце «сообщение» для каждой строки. Вывод IP HTML будет содержаться в одной ячейке.
О, я вижу. Итак, каково остальное содержимое csv? разделены ли они запятыми и используются ли символы кавычек (")?"
Хороший вопрос. Я внес в OP полную строку вывода.
Данные имеют escape-символ \
, который не используется по умолчанию. Со следующим:
df = pd.read_csv(<filename>,header=None,escapechar='\\')
Я получил:
>>> df
0 1 2 3 \
0 \n"241279" EMAIL_ADDRESS EMAIL_ADDRESS 1607be7d4f2d66af
4 5 6 \
0 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Tr... DATE 01:47:58 gmail
7 8 9 ... 14 15 16 17 18 19 \
0 email NaN NaN ... 23 NaN EMAIL_ADDRESS EMAIL_ADDRESS NaN f
20 21 22 23
0 EMAIL_ADDRESS EMAIL_ADDRESS 9 f
[1 rows x 24 columns]
Отлично, @MarkTolonen, спасибо за ответ. Я отредактировал OP, чтобы включить изменение URL.
Возможно, попробуйте показать полную строку файла csv, который вы читаете (замените данные фиктивными значениями), и ожидаемый результат от .head () - это даст людям больше возможностей для работы