使用 boto 加载文件有什么更好的方法?(获取文件名太长错误)



所以我正在尝试使用tf.contrib.learn.preprocessing.VocabularyProcessor.restore()从 S3 存储桶恢复词汇文件。首先,我尝试获取存储桶的路径名以在.restore()中使用,但不断收到"对象不存在"错误。之后,经过进一步的研究,我发现了一种人们用来加载文本文件和 JSON 文件的方法,并在这里应用了相同的方法:

obj = s3.Object(BUCKET_NAME, KEY).get()['Body'].read()
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor.restore(obj)

这工作了一段时间,直到文件内容增加并最终出现"文件名太长"错误。有没有更好的方法从 S3 存储桶加载和还原文件?

顺便说一句,我在我的机器上本地测试了它,它工作得很好,因为它只需要获取文件的路径,而不是文件的全部内容。

看起来您正在传递文件的实际内容作为文件名?

我认为您需要将对象从 S3 下载到 tmp 文件,并将该文件的路径传递到还原中。

尝试使用此处的方法:http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Object.download_file

更新:我在这里浏览了代码:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/learn/python/learn/preprocessing/text.py,看起来这只是节省了泡菜,因此您可以轻松地导入泡菜并调用以下内容:

import pickle
obj = s3.Object(BUCKET_NAME, KEY).get()['Body']
vocab_processor = pickle.loads(obj.read())

希望这有效吗?

相关内容

  • 没有找到相关文章

最新更新