下载然后删除许多文件,这些文件一起非常大,问题?

时间:2014-04-21 22:12:17

标签: python pdf file-io bigdata

使用模块pypdf2urllib我计划对Python中的许多.pdf文件进行相当大规模(文本)的分析。我目前的计划是使用urllib下载文件,将其保存到我的计算机,然后使用pypdf2打开/提取文本。

.pdf文件的大小范围为10-500 MB,(因为有~16000 .pdf文件)意味着项目的规模将在GB到TB的范围内。提取的数据不会很大,只是标记的单词关联集/计数,但.pdf文件本身就是一个问题。

我不打算一次全部下载它们,而是迭代地下载它们,以免我的系统不堪重负。以下是高级工作流程:

for pdf_url in all_list:

    download_using_urllib(pdf_url)
    text = read_text(pypdf2.pdf.PdfFileReader(pdf_url+'.pdf'))
    store_word_assoc(text)
    delete_file(pdf_url)

大部分代码已经编写完毕,如果相关,我可以发布。我的问题是:在我的HD上存储然后删除多达8 TB的数据会导致我的电脑出现任何问题吗?正如你所看到的那样,我并不是一次性存储它,但我只是有点担心,因为我之前从未做过这种规模的任何事情。如果这是一个问题,我怎么能以其他方式构建我的项目以避免这个?

谢谢!

2 个答案:

答案 0 :(得分:2)

我想说你可能会考虑在下载时将PDF存储在内存中。 NamedTemporaryFiles可能是处理此问题的好方法。您可以将文件保存在内存中并从中读取,然后丢弃该文件。这样可以避免你的高清做大量写密集的事情。

您也可以考虑使用requests而不是urllib,它比urllib更直观。哦,作为奖励,它们都适用于Python 2和3。

答案 1 :(得分:1)

假设你有几GB的内存,我建议你把它们留在内存中。它将足够慢,因为它是下载那么多数据。不必要地将它保存到磁盘只会增加这个痛苦的过程。

由于这将是一个非常长时间运行的过程,我还建议您跟踪提取的文件。这样当它崩溃时,你可以从你离开的地方开始。

I am going to use requests, because it is very developer friendly.

伪代码:

pdf_url中的pdf_url:     if yet_got_it(pdf_url):         继续

req = requests.get(pdf_url)
if req.status_code < 400:
    text = read_text(req.content)
    store_word_assoc(text)
    mark_completed(pdf_url)

如果内存不足,建议的解决方案将起作用,不会对磁盘​​产生太大影响。这是一个很好的写作,但假设你没有一个应该没有什么不良影响的SSD。