需要在Python中将CSV输出打印到单独的行中,而不是一个长字符串

2024-10-01 04:46:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将webscrape项目的输出打印到CSV文件中

例如,我在一个名为SUPP\u NAME的列表下有一个供应商名称列表:(举个例子,实际列表中有50个项目)

['"FULIAN\\u0020\\u0028M\\u0029\\u0020SENDIRIAN\\u0020BERHAD"', '"RISO\\u0020SEKKEN\\u0020SDN.\\u0020BHD."', '"NATURE\\u0020PROFUSION\\u0020SDN.\\u0020BHD."']

在一个名为SUPP\ u years的列表下,有一个标明年份的数字列表:

['"9"', '"4"', '"1"', '"1"']

我的计划是将它们放入一个CSV中,然后将它们作为一个数据帧读回,然后执行解码以获得一组值

迄今为止的代码:

import csv

with open('output3.csv' , 'w') as f:
    writer = csv.writer(f)

    headers = "Supplier_name,Years\n"

    f.write(headers)

    supp_names = re.findall(r'("supplierName"):("\w+.+")', results[17].text) 
    supp_years = re.findall(r'("supplierYear"):("\d+")', results[17].text)

    SUPP_NAME = []
    for title, name in supp_names:
        print (name)
        SUPP_NAME.append(name)
        #f.write(name + "\n")

    SUPP_YEAR = []    
    for year,number in supp_years:
        print (number)
        SUPP_YEAR.append(number)
        #f.write(number + "\n")

    writer.writerow([SUPP_NAME, SUPP_YEAR])

然而,我得到的是,在Supplier_nameYears列下,这两列下的每一列下的一个单元格都填充了一长串仍然包含在列表中的项,而不是逐个分隔的项

我做错什么了?提前感谢您的回答


Tags: csv项目namenumber列表yearwritewriter
1条回答
网友
1楼 · 发布于 2024-10-01 04:46:32

这两个re.findall()调用将为您提供项目列表(希望两者长度相同)。其思想是从每个元素中提取一个元素并将其写入输出文件。Python有一个名为^{}的有用函数来实现这一点。您可以将列表和循环都提供给它,并在每次迭代中为您提供一个项目:

import csv

with open('output3.csv', 'w' newline='') as f_output:
    writer = csv.writer(f_output)
    writer.writerow(["Supplier_name" , "Years"])

    supp_names = re.findall(r'("supplierName"):("\w+.+")', results[17].text) 
    supp_years = re.findall(r'("supplierYear"):("\d+")', results[17].text)

    for name, year in zip(supp_names, supp_years):
        writer.writerow([name, year])

csv.writer()对象被设计用来获取项目列表,并将它们写入文件中,在它们之间自动添加所需的(即逗号)分隔符

我假设您使用的是Python3.x?如果不是,则应更改以下内容:

with open('output3.csv', 'wb') as f_output:

相关问题 更多 >