python - 使用 Pandas DataFrame 向现有 CSV 添加新行
问题描述
我正在尝试向现有csv
文件添加新行。新row
的来自 a for loop
which is appended
tostring list
并被保存到 a DataFrame
。我不希望整个loop
保存在内存中,然后保存到csv
文件中。我更喜欢将每一行添加到文件中,在循环迭代时单独更新它,因为它是一个长时间运行的循环,不必等到整个循环完成。
我能够遍历该组,但它会导致重复的行。
names = []
addresses = []
pages = np.arange(10300, 10400, 1)
for page in pages:
page = requests.get(
"https://www.testpage.com/" + str(page), headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
company = soup.find_all('main')
for container in company:
name = container.find("b", {"id": "company_name"})
names.append(name.text.strip())
address = container.find('div', attrs={'class': 'text location'})
addresses.append(address.text.strip())
companies=pd.DataFrame({
'name': names,
'address': addresses
})
companies.to_csv(r'b_10300_10400.csv', mode='a', header=False)
有什么想法吗?
解决方案
使用构建的标准csv
模块来一次写入一行内容。你没有做任何pandas
相关的处理,它只是碍事。
import csv
pages = np.arange(10300, 10400, 1)
with open('b_10300_10400.csv', mode='a', newline='') as outfile:
writer = csv.writer(outfile)
for page in pages:
page = requests.get(
"https://www.testpage.com/" + str(page), headers=headers)
soup = BeautifulSoup(page.text, 'html.parser')
company = soup.find_all('main')
for container in company:
name = container.find("b", {"id": "company_name"}).text.strip()
address = container.find('div', attrs={'class': 'text location'}).text.strip()
writer.writerow((name, address))
推荐阅读
- java - Java 类 TrayIcon,通知消息。如何用自定义声音替换系统声音?
- python - 我的 .qss 文件无法应用于我的 .ui 文件
- java - 在这个 IntelliJ 搜索中,括号外的 jar 表示什么
- javascript - 节点js从另一个/子函数返回请求响应?
- android - Android Studio 警告上下文中的内存泄漏,该上下文注入了 @ApplicationContext
- typescript - vue composition api toRefs typescript
- assembly - 代码未以汇编语言显示结果
- reactjs - 如何在 React 中渲染文本或 url?
- javascript - 如何在 JavaScript 中找到数组中最长的字符串?
- django - 有没有办法为 Django 后端中的选择字段创建端点(并随后查看)?