创建唯一名称

时间:2014-12-31 13:45:17

标签: python pdf repository

我正在从存储库创建语料库。我以pdf格式从存储库下载文本,将这些文本转换为文本文件,然后保存它们。但是,我正试图找到一个命名这些文件的好方法。

要获取文件名,我这样做:(记录生成器是我用来访问存储库中所有记录的Sickle包中的对象)

for record in records:
            record_data = []  # data is stored in record_data
            for name, metadata in record.metadata.items():
                for i, value in enumerate(metadata):
                    if value:
                        record_data.append(value)
            file_path = ''
            fulltext = ''
            for data in record_data:
                if 'Fulltext' in data:
                    fulltext = data.replace('Fulltext ', '')
                    file_path = '/' + os.path.basename(data) + '.txt'
                    print fulltext
                    print file_path

最后两行的印刷陈述:

https://www.duo.uio.no/bitstream/handle/10852/34910/1/Bertelsen-Master.pdf
/Bertelsen-Master.pdf.txt
https://www.duo.uio.no/bitstream/handle/10852/34912/1/thesis-output.pdf
/thesis-output.pdf.txt
https://www.duo.uio.no/bitstream/handle/10852/9976/1/gartmann.pdf
/gartmann.pdf.txt
https://www.duo.uio.no/bitstream/handle/10852/34174/1/thesis-mariusno.pdf
/thesis-mariusno.pdf.txt
https://www.duo.uio.no/bitstream/handle/10852/9285/1/thesis2.pdf
/thesis2.pdf.txt
https://www.duo.uio.no/bitstream/handle/10852/9360/1/OMyhre.pdf

正如您所看到的,我将.txt添加到原始文件名的末尾,并希望使用该名称来保存文件。但是,很多文件都有相同的文件名,比如thesis.pdf。我想解决这个问题的一种方法是在名称中添加一些随机数,或者在每条记录上加一个数字并使用它,如下所示:thesis.pdf.124.txt(在名称中加上124)。

但这看起来不太好,而且存储库很大,所以最后我会在每个文件名后附加相当大的数字。关于如何解决这个问题的任何明智建议?

我见过使用时间模块的建议。我想也许我可以使用正则表达式或其他技术来提取部分名称(因此每个名称都相同),然后创建一个方法,将字符串添加到文件的url上的每个文件,该文件应该是唯一的。

1 个答案:

答案 0 :(得分:1)

您可以做的一件事是计算文件的唯一哈希,例如使用MD5或SHA1(或任何其他),参见this article。但是对于大量文件,这可能会变得非常慢。

但是你真的没有看到触摸这段代码中的文件。要生成一些唯一ID,您可以使用uuid并将其放在名称中的某处。