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

时间:2018-05-02 16:28:26

标签: python csv

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

例如,我在名为SUPP_NAME的列表下有供应商名称列表:(只是一个例子,实际列表里面有50个项目)

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

以及表示年份的数字列表,名为SUPP_YEARS:

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

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

到目前为止

代码:

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列下,这两列中的每一列下的一个单元格都填充了列表中仍包含的项目的LONG列表,而不是物品一个一个地分开。

我做错了什么?在此先感谢您的回答。

1 个答案:

答案 0 :(得分:0)

两个re.findall()调用正在为您提供项目列表(希望两者的长度相同)。然后我们的想法是从每个元素中提取一个元素并将其写入输出文件。 Python有一个名为zip()的有用函数来执行此操作。你给它两个列表和循环,每次迭代都给你一个项目:

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()对象旨在获取项目列表并将它们写入您的文件,并在它们之间自动添加所需的(即逗号)分隔符。

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

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