gpt4 book ai didi

python - 预期的 str、bytes 或 os.PathLike 对象,而不是 InMemoryUploadedFile

转载 作者:行者123 更新时间:2023-12-02 02:15:10 24 4
gpt4 key购买 nike

我有一个方法来读取 Newick 文件并在 Django 框架中返回一个字符串,如下所示:

def handle_uploaded_file(f):
output = " "
for chunk in f.chunks():
output += chunk.decode('ascii')
return output.replace("\n", "").replace("\r", "")


def post(self, request):
form = HomeForm(request.POST, request.FILES)
if form.is_valid():
input = handle_uploaded_file(request.FILES['file'])
treeGelezen = Tree(input, format=1)
script, div = mainmain(treeGelezen)
form = HomeForm()
args = {'form': form, 'script': script, 'div': div}
return render(request, self.template_name, args)

这适用于普通的 Newick 文件,但我也有一些文件在文件开头有一个字符串。我正在尝试创建另一种方法来检查文件前面是否有以下字符串(某些文件中就是这种情况):“newick;”并删除该字符串(如果找到)。它在本地工作,但我似乎无法合并它们。这是它在本地的样子:

def removeNewick(tree_with_newick):
for x in tree_with_newick:
if x.startswith('newick;'):
print('')
return x


filepath = "C:\\Users\\msi00\\Desktop\\ncbi-taxanomy.tre"
tree_with_newick = open(filepath)
tree = Tree(newick=removeNewick(tree_with_newick), format=1)

当我在 python 中指定路径时效果很好,所以我尝试在 Django 中将它们组合起来,如下所示:

def handle_uploaded_file(f):
tree_with_newick = open(f)
for x in tree_with_newick:
if x.startswith('newick;'):
print('')
return cutFile(x)


def cutFile(f):
output = " "
for chunk in f.chunks():
output += chunk.decode('ascii')
return output.replace("\n", "").replace("\r", "")


def post(self, request):
form = HomeForm(request.POST, request.FILES)
if form.is_valid():
input = handle_uploaded_file(request.FILES['file'])
treeGelezen = Tree(input, format=1)
script, div = mainmain(treeGelezen)
form = HomeForm()
args = {'form': form, 'script': script, 'div': div}
return render(request, self.template_name, args)

这不起作用,并且会出现以下错误:

expected str, bytes or os.PathLike object, not InMemoryUploadedFile

我已经研究了两天了,但无法弄清楚为什么会弹出错误。

最佳答案

发生错误的原因是函数handle_uploaded_file(f)正在尝试打开一个已打开的文件。

request.FILES['file']的值是一个InMemoryUploadedFile,可以像普通文件一样使用。您无需再次打开它。

要修复此问题,只需删除尝试打开文件的行即可:

def handle_uploaded_file(f):
for x in f:
if x.startswith('newick;'):
print('')
return cutFile(x)

关于python - 预期的 str、bytes 或 os.PathLike 对象,而不是 InMemoryUploadedFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50638374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com