экспорт beautifulsoup в csv

#python-2.7 #csv #beautifulsoup

#python-2.7 #csv #beautifulsoup

Вопрос:

Я собираю данные из полей и сохраняю их как

 data.append(newdata)
  

Затем каждая полная запись сохраняется как:

 list_of_rows.append(data)
  

Затем я пытаюсь сохранить в csv

 data_mod = [[item] for item in list_of_rows]

with open("./hotels.csv", "wb") as outfile:
    writer = csv.writer(outfile)
    for row in data_mod:
        writer.writerow(row)
outfile.close()
  

Но когда я загружаю его в csv, все сохраняется в первом поле. Как мне правильно его разбить?

Редактировать

Каждая строка выглядит следующим образом

[[u'Staybridge Suites London - Vauxhall', 'nTushar Kn', 'nIlfordn', 0, u'2 reviews', '5 of 5 stars', '29 September 2016', u'nHome comes at staybridge........it nice with stay bridge.....awesome ambiance, kitchen, rooms, break fast area.............nEverything is at place.....nTalking about people of stay bridge... they all are very much cooperative, kind, best service people I have ever saw, meet...... its absolutely fantastic with stay bridge..........love u guysss.....n']]

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

1. Почему вы открываете файл в двоичном режиме? Не связано, но вы могли бы просто использовать writer.writerows(data_mod)

2. Я не знаю, что я открываю в двоичном формате — какой должна быть строка? writer.writerows(data_mod) по-прежнему не позволяет мне загружать в csv отдельные поля; все попадает в первый столбец

3. "wb" b-> двоичный режим, вам просто нужно w . Как это data_mod выглядит?

4. добавлен пример строки вывода

5. Список внутри списка?

Ответ №1:

Не переносите строки в списки, у вас уже есть список списков. Вам также необходимо удалить новые строки, иначе каждая строка получит свою собственную строку, а не записывать все в одну строку и кодировать в utf-8:

 with open("./hotels.csv", "w") as outfile:
    writer = csv.writer(outfile)
    writer.writerows([s.strip().encode("utf-8") if isinstance(s, unicode) else s
                     for s in row] for row in list_of_rows)
  

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

1. Я только что попробовал это, и я получаю UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128) при записи файла csv.

2. Редактирование должно работать, откуда вы получаете эти данные? У вас смешаны unicode, str и целые числа.

3. Я удаляю его с веб-страницы — tripadviser

4. Я не понимаю, как вы могли бы получить все разные типы, все они должны быть строками unicode, если вы не меняете их вручную. bs4 предоставляет вам unicode, так что вы определенно что-то делаете с этим.

5. Да, это то, на что я его вернул