我是Python初学者,在此论坛上未能找到解决我的问题的解决方案。可能是因为我无法用正确的术语描述我的问题-如果是这种情况,我事先表示歉意。
我使用BeautifulSoup从html文档中提取了字符串列表。我想将此字符串列表转换为csv(单列中每行1个字符串)。但是,我的程序是将每个字符串的每个字符放在其自己的列中
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文件将每个字符串中的每个字符放在单独的列中。我只希望在1列中使用“测试”字符串。
我尝试了以下解决方案:
for item in h3List:
print(item)
writer.writerow([item])
但是,当我的字符串包含空格时,例如字符串“ test hello”-输出的csv会在各个列中分隔单词,如下所示:
我的代码有什么问题?对于我的一生,我似乎无法弄清楚。
如果该论坛中已经存在该解决方案,那么希望您可以链接到该帖子。谢谢!!
答案 0 :(得分:2)
原因是因为writer.writerow
希望您传递可以迭代的内容-列表,元组或其他任何内容。当您将字符串传递给它时,它被认为是可迭代的-字符序列。因此,要解决此问题,您需要在通话时在项目周围放置方括号:将其设置为writer.writerow([item])
而不是writer.writerow(item)
。
答案 1 :(得分:1)
用以下代码替换当前代码。
我正在使用熊猫。
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')