【问题标题】:Generate data using Python and export to excel file使用 Python 生成数据并导出到 excel 文件
【发布时间】:2018-03-19 15:15:21
【问题描述】:

我是个初学者。这会从 URL 生成“正确”数据,但是当我尝试生成 CSV 文件时,生成的 Excel 文件为空。 这是代码...

import csv
import urllib.request
from bs4 import BeautifulSoup

f = open('dataoutput.csv', 'w', newline = "")
writer = csv.writer(f)

soup = BeautifulSoup(urllib.request.urlopen("https://www.rjobrien.co.uk/tools/quoteresult/symbol/FGBLM8").read(), 'lxml')

tbody = soup('table', {"class": "table table-bordered table-condensed"})[0].find_all('tr')

for row in tbody:
    cols = row.findChildren(recursive=False)
    cols = [ele.text.strip() for ele in cols]

writer.writerow(cols)

【问题讨论】:

  • 确保关闭文件,以便将所有数据刷新到文件中。更好的是,使用with 语句自动关闭文件。
  • 摆弄,下面似乎工作正常...
  • import csv import urllib.request from bs4 import BeautifulSoup try: soup = BeautifulSoup(urllib.request.urlopen("rjobrien.co.uk/tools/quoteresult/symbol/FGBLM8").read(), 'lxml') except: pass tbody = soup('table', {"class": "table table-bordered table-condensed"})[0].find_all('tr') for row in tbody: dataDB = row.findChildren(recursive=False) dataDB = [ele.text.strip( ) for ele in dataDB] with open('DB.csv', 'w', newline = "") as f: writer = csv.writer(f, quoting=csv.QUOTE_ALL) writer.writerow(dataDB)
  • 评论中的代码不可读。编辑您的问题,或者在您解决问题后回答。

标签: python excel file csv


【解决方案1】:

您的意思是把writerow() 放在循环之后吗?正如所写,它只会产生最后一行。

我假设你稍后会f.close()。我建议使用with,它将在范围结束时关闭文件。例如,

with open('dataoutput.csv', 'w', newline = "") as f:
    writer = csv.writer(f)
    ...

【讨论】:

  • 是的 - 我只需要输出的最后一行。尽管 print(cols) 生成正确的输出,但它生成的 CSV Excel 文件是空的,即数据没有被“发送”到 CSV 文件
【解决方案2】:

您应该缩进<tab>writer.writerow(cols) 与循环相同的标识。

你应该在写完文件后f.close()。 Python 应该自动执行此操作,但您永远不知道它何时会执行此操作,并且您正在使用系统资源(并行打开的文件数量有限)。

最终您可以添加为第一行:sep=,,这样您就不会遇到不同的 Excel 语言环境的问题。见https://superuser.com/questions/407082/easiest-way-to-open-csv-with-commas-in-excel

【讨论】:

  • “s”无效 - 仍未将数据导入 CSV 文件...
猜你喜欢
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多