将字符串列表写入CSV

时间:2020-05-26 05:05:54

标签: python string list csv

我是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)

output csv

如上图所示,输出的csv文件将每个字符串中的每个字符放在单独的列中。我只希望在1列中使用“测试”字符串。

我尝试了以下解决方案:

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

但是,当我的字符串包含空格时,例如字符串“ test hello”-输出的csv会在各个列中分隔单词,如下所示:

strings with spaces

我的代码有什么问题?对于我的一生,我似乎无法弄清楚。

如果该论坛中已经存在该解决方案,那么希望您可以链接到该帖子。谢谢!!

2 个答案:

答案 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')