IsADirectoryError: [errno 21] 是一个目录:"/"说明



我从这个代码中得到这个错误。

import os
import requests
import shutil

path = "/Users/mycode/Documents/API upload/"

api_endpoint = "xxxxxx"

files = {
'file': open(p,'rb') for p in os.path.abspath(path)
}
for file in os.path.abspath(path):
response = requests.post(url=api_endpoint, files=files)
if response.status_code == 200:
print(response.status_code)
print("success!")
else:
print("did not work")

IsADirectoryError: [Errno 21] Is a directory: '/'

^这个错误是什么意思?我试着在谷歌上搜索,但仍然不明白我的情况。它与路径有关,但不确定为什么。

任何帮助!

for p in os.path.abspath(path)

并不像你想象的那样。

遍历给定目录中的所有文件。使用操作系统。Listdir。您可以使用os.path.join将目录路径和目录内的文件名组合起来。pathlib模块有一个更容易使用的/更高级别的接口来实现所有这些。

你的代码所做的是遍历os.path.abspath(path)返回的字符串中的所有字符。第一个字符是/。然后尝试将其作为文件打开。这不起作用,因为/是一个目录。

您可能希望考虑以块的形式执行此操作,因为如果您的目录内容非常大,您可能会耗尽文件描述符。

应该这样做:

from requests import post
from glob import glob
from os.path import join, isfile
DIR = '/Users/mycode/Documents/API upload/'
CHUNK = 10
API_ENDPOINT = '...'
filelist = [filename for filename in glob(join(DIR, '*')) if isfile(filename)]
for idx in range(0, len(filelist), CHUNK):
files = [('file', open(fn, 'rb')) for fn in filelist[idx:idx+CHUNK]]
post(API_ENDPOINT, files=files).raise_for_status()
for _, fd in files:
fd.close()

注意:

为了提高效率,您应该考虑为

使用多线程。

相关内容

  • 没有找到相关文章

最新更新