2 回答
TA贡献1806条经验 获得超5个赞
的参数writer.writerows()应该是一个二维列表,但rows_data只有一行。
您可以将所有行收集到列表列表中。然后在循环完成后,调用writerows()所有内容。
all_rows = []
for tr in table_rows:
td = tr.find_all('td')
rows_data = [tabdata.text.strip().replace("\t", "").replace("\n", "") for tabdata in td]
all_rows.append(rows_data)
with open('bahncardkreditkarten-umsatz.csv', 'w', newline='') as filechen:
writer = csv.writer(filechen)
writer.writerows(all_rows)
TA贡献1898条经验 获得超8个赞
您每次通过循环都会覆盖您的行。假设您正在读取的表中的最后一行是空的,因此文件最终为空
在这个部分:
for tr in table_rows:
td = tr.find_all('td')
rows_data = [tabdata.text.strip().replace("\t", "").replace("\n", "") for tabdata in td]
# print(rows_data)
with open('bahncardkreditkarten-umsatz.csv', 'w', newline='') as filechen:
writer = csv.writer(filechen)
writer.writerows(rows_data)
您将循环遍历每个表行,对于每一行,您重新打开 .csv 文件并从头开始写入。相反,您应该打开文件一次,然后在打开文件后循环遍历表行,每次通过循环添加新数据,或者将行收集到一个数组中,然后通过一次调用 writerows 将它们写出。
或者,您可以使用打开文件'a'而不是'w'附加到文件;然而,这似乎不必要地低效和混乱。
添加回答
举报