传递文件的 "data" 而不是 Python 中的实际文件
Pass a file's "data" instead of the actual file in Python
我正在使用接受 pdf 文件和 returns JSON 的简历解析 python 库。代码简单如下:
parsed_data = ResumeParser("file.pdf").get_extracted_data()
我想围绕这个公开一个 API,所以在 API 中,pdf 数据作为 base64 字符串发送。所以,我先把数据写入一个文件,然后运行上面的代码。我当前的代码如下所示:
def parse(b64data):
bytes = b64decode(b64data, validate=True)
f = open('tmp_file.pdf', 'wb')
f.write(bytes)
f.close()
parsed_data = ResumeParser("tmp_file.pdf").get_extracted_data()
return parsed_data
有没有更好的方法来避免将数据写入文件?我将此 API 作为无服务器函数公开,我认为我可以通过不写来节省时间。
参考文献:
您正在使用的库似乎接受 BytesIO
对象作为向其传递包含文件名的字符串的替代方法。但是,它似乎还期望此 BytesIO
对象具有 name
属性,它从中提取扩展名,以便确定文件类型。因此,我们将向我们的 BytesIO
对象添加一个包含字符串 .pdf
的虚假 name
属性。
所以,我们应该可以使用这样的东西:
import io, base64
def parse(b64data):
bytes = base64.b64decode(b64data, validate=True)
bytesio = io.BytesIO(bytes)
bytesio.name = '.pdf'
parsed_data = ResumeParser(bytesio).get_extracted_data()
return parsed_data
我正在使用接受 pdf 文件和 returns JSON 的简历解析 python 库。代码简单如下:
parsed_data = ResumeParser("file.pdf").get_extracted_data()
我想围绕这个公开一个 API,所以在 API 中,pdf 数据作为 base64 字符串发送。所以,我先把数据写入一个文件,然后运行上面的代码。我当前的代码如下所示:
def parse(b64data):
bytes = b64decode(b64data, validate=True)
f = open('tmp_file.pdf', 'wb')
f.write(bytes)
f.close()
parsed_data = ResumeParser("tmp_file.pdf").get_extracted_data()
return parsed_data
有没有更好的方法来避免将数据写入文件?我将此 API 作为无服务器函数公开,我认为我可以通过不写来节省时间。
参考文献:
您正在使用的库似乎接受 BytesIO
对象作为向其传递包含文件名的字符串的替代方法。但是,它似乎还期望此 BytesIO
对象具有 name
属性,它从中提取扩展名,以便确定文件类型。因此,我们将向我们的 BytesIO
对象添加一个包含字符串 .pdf
的虚假 name
属性。
所以,我们应该可以使用这样的东西:
import io, base64
def parse(b64data):
bytes = base64.b64decode(b64data, validate=True)
bytesio = io.BytesIO(bytes)
bytesio.name = '.pdf'
parsed_data = ResumeParser(bytesio).get_extracted_data()
return parsed_data