我编辑了一些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?
答案 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_name
,product_number
和category
的完整内容之后执行此操作,然后一次执行一行:
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
库。