我正在尝试将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_name
和Years
列下,这两列中的每一列下的一个单元格都填充了列表中仍包含的项目的LONG列表,而不是物品一个一个地分开。
我做错了什么?在此先感谢您的回答。
答案 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: