如何将结果附加到CSV文件

时间:2019-05-04 16:20:29

标签: python python-3.x string list csv

我编辑了一些Python代码以使用.append方法,这意味着我编写f.write()的方式将不再起作用(TypeError: can only concatenate list (not "str") to list)。

这是刮板的一部分,我已经对其进行了测试并且可以打印。在编辑循环以包含.append之前,我使用以下代码行将其导出到.csv:

f.write(product_name + "," + product_number + "," + category + "\n")

那将不再起作用,我不确定如何进行编辑。任何帮助将不胜感激。

我已经编辑了循环,如下所示:

containers = page_soup.findAll("tr",{"class":"products"})

product_name = []
product_number = []
category = []

for container in containers:
    product_name.append( container.a.text )
    product_number.append( container.div.text )
    category.append( container.select_one('td:nth-of-type(4)').text.strip() )

我相信我知道添加.append方法意味着我不能使用上面显示的f.write方法(列表与字符串,对吗?)。当我确实使用上面显示的f.write代码时,我得到一个“ TypeError: can only concatenate list (not "str") to list”,我认为我理解。

我知道我的循环正在工作,因为此代码可以踢出正确的结果:

print("product_name:", product_name)
print("product_number:", product_number)
print("category: ", category)

现在如何将其写到.csv?

2 个答案:

答案 0 :(得分:2)

为避免重复两次,您可以在for循环内简单地写入文件:

product_names = []
product_numbers = []
categories = []

with open('file.csv','w') as f:
    for container in containers:
            product_name = container.a.text
            product_number = container.div.text
            category =  container.select_one('td:nth-of-type(4)').text.strip() 

            product_names.append(product_name)
            product_numbers.append(product_number)
            categories.append(category)

            f.write(product_name + "," + product_number + "," + category + "\n")

您可能还想使用csv模块将行写入文件,而不是手动使用字符串串联创建行:

import csv

with open('file.csv','w') as f:
    csv_out = csv.writer(f)
    for container in containers:
            #...same as above...

            csv_out.writerow([product_name, product_number, category])

答案 1 :(得分:1)

与以前相同,只是在建立product_nameproduct_numbercategory的完整内容之后执行此操作,然后一次执行一行:

items = zip(product_name, product_number, category)  # zip these three lists into a single 2D list
with open("my_file.csv", 'w') as f:
    for item in items:
        f.write(f"{item[0]},{item[1]},{item[2]}\n")

如果您遇到比这更复杂的事情,也可以考虑使用csv库。