Запись списка строк в csv - PullRequest
3 голосов
/ 26 мая 2020

Я начинающий программист Python, и мне не удалось найти решение моей проблемы на этом форуме. Это может быть потому, что я не могу описать свою проблему на правильном жаргоне - заранее прошу прощения, если это так.

Я использовал BeautifulSoup для извлечения списка строк из html документа. Я хочу передать этот список строк в csv (по одной строке на строку в одном столбце). Однако моя программа помещает каждый символ каждой строки в отдельный столбец

import csv

h3List= []

soup = BeautifulSoup(open('test.html'),'html.parser')

h3 = soup.find_all('h3')

for text in h3:
    h3List.append(text.text)

with open('h3List.csv','w') as f:
    writer = csv.writer(f)
    for item in h3List: 
        print(item)
        writer.writerow(item)

вывод csv

Как вы можете видеть на изображении выше, вывод csv file помещает каждый символ в каждой строке в отдельные столбцы. Мне нужны "тестовые" строки только в 1 столбце.

Я пробовал это решение:

for item in h3List:
    print(item)
    writer.writerow([item])

Но когда моя строка содержит пробелы, например, строка 'test hello' - выходной csv разделяет слова в отдельные столбцы, как показано ниже:

strings with spaces

Что не так с моим кодом? Честно говоря, я не могу понять этого.

Если решение уже существует на этом форуме, я был бы признателен за ссылку на сообщение. Спасибо !!

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Причина в том, что writer.writerow ожидает, что вы передадите что-то, что можно повторять - список, кортеж или что-то еще. Когда вы передаете ему строку, она считается повторяющейся - последовательность символов. Поэтому, чтобы исправить это, вам нужно заключить элемент в квадратные скобки при вызове: сделайте его writer.writerow([item]) вместо writer.writerow(item).

1 голос
/ 26 мая 2020

Замените текущий код следующим.

Я использую pandas.

import pandas as pd
import csv

h3List= []

soup = BeautifulSoup(open('test.html'),'html.parser')

h3 = soup.find_all('h3')

for text in h3:
    h3List.append(text.text)
df = pd.DataFrame(h3List)
df.to_csv('h3_test.csv')


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