3

我正在尝试从一个站点下载 PDF 然后阅读它,所有这些都在一个运行在 Heroku 中的单个工作人员测功机上的单个 python 脚本中。但是,我的脚本要求将该文件临时存储在临时文件系统中以便读取。

文档中,这应该是可能的:

每个 dyno 都有自己的临时文件系统,以及最近部署的代码的新副本。在 dyno 的生命周期中,它的运行进程可以将文件系统用作临时暂存器,但是任何其他 dyno 中的进程都看不到写入的文件,并且在停止或重新启动 dyno 时,任何写入的文件都将被丢弃。

然而,无论我做什么,它似乎都会抛出一个错误,类似于我在本地机器上运行它并且文件不存在时得到的错误(否则脚本在本地机器上运行良好)。

请参阅下面我的代码的相关部分,我正在使用 Tabula 将 PDF 处理为 CSV。

另一点需要注意的是,在 Heroku 中检查文件大小时,它会返回正确的值,因此文件已下载并在文件系统中,但由于某种原因无法被 Tabula 包装器读取。

#urllib.urlretrieve(url[, filename[, reporthook[, data]]])
urllib.urlretrieve(url, 'downloaded.pdf')

#check if pdf downloaded by checking file size
filesize = os.path.getsize('downloaded.pdf')
print filesize  # this returns the correct value

#if pdf was downloaded correctly then convert info to csv
if (filesize > 30000):
    tabula.convert_into("downloaded.pdf", # error at this line
                            "downloaded.csv",
                            pages="all",
                            output_format="csv")
else:
    print ('404 error')
    sys.exit

我的问题类似于这个问题,除了我在单个测功机上运行脚本,这应该可以实现。

4

0 回答 0