我希望使用下面的python代码将文件的绝对路径选为输入文件(来自表单中的文件浏览器):
for attr, document in request.files.iteritems():
orig_filename = document.filename
print os.path.abspath(orig_filename)
mhash = get_hash_for_doc(orig_filename)
这将使用' orig_filename'打印当前工作目录的路径(执行python脚本的位置)。附加到它,这是错误的路径。我在linux OS下使用python 2.7,flask 0.12。
要求是在将文件上传到服务器以检查重复数据删除之前查找该文件的哈希值。所以我需要通过将选择用于散列的文件传递给另一个函数来使用该算法:
def get_hash_for_doc(orig_filename):
mhash = None
hash = sha1()#md5()
with open(mfile, "rb") as f:
for chunk in iter(lambda: f.read(128 * hash.block_size), b""):
hash.update(chunk)
mhash = hash.hexdigest()
return mhash
在这个函数中,我想在上传之前从orig_filename的绝对路径读取文件。在此避免所有其他代码检查。
答案 0 :(得分:0)
首先,您需要创建一个临时文件来模拟此必需文件,然后在其上进行处理
import tempfile, os
try:
fd, tmp = tempfile.mkstemp()
with os.fdopen(fd, 'w') as out:
out.write(file.read())
mhash = get_hash_for_doc(tmp)
finally:
os.unlink(tmp)
答案 1 :(得分:0)
如果要查找文件夹/file.ext,对于输入文件,只需使用“ os.path.abspath”,例如:
savefile = os.path.abspath(Myinputfile)
当“ Myinputfile”是一个包含相对路径和文件名的变量时。例如,从用户定义的参数派生而来。
但是,如果您希望使用文件夹的绝对地址而不使用文件名,请尝试以下操作:
saveloc = os.path.dirname(os.path.realpath(Myinputfile))
答案 2 :(得分:-1)
您可以使用pathlib查找所选文件的绝对路径。