我正在尝试从站点下载PDF然后阅读它,所有这些都在Heroku中的单个工作器dyno上运行的单个python脚本中。但是,我的脚本要求将文件临时存储在临时文件系统中以便阅读。
从documentation开始,这应该是可能的:
每个dyno都有自己的短暂文件系统,并带有新的副本 最近部署的代码。在dyno的一生中它的运行 进程可以使用文件系统作为临时暂存器,但没有 写入的文件对任何其他dyno和中的进程可见 写入的任何文件将在dyno停止时丢弃 重新启动。
然而,无论我做什么,它似乎都会抛出一个类似于我在本地计算机上运行时所得到的错误,并且该文件不存在(该脚本在本地计算机上运行正常)。 / p>
请参阅下面我的代码的相关部分,我使用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
我的问题类似于这个question,除了我在一个dyno上运行脚本,这应该可以实现。