Python 我如何打开一些无限的文件,以便在请求中发送它们?

Python 我如何打开一些无限的文件,以便在请求中发送它们?,python,Python,我需要获取用户目录的内容并在请求中发送它们。不幸的是,我无法修改我请求的服务,因此我无法压缩所有文件并发送,我必须发送所有文件 对文件的总大小有限制,但对文件的大小没有限制。不幸的是,一旦我尝试打开太多文件,Python就会出错:[Errno 24]打开的文件太多。以下是我当前的代码: files_to_send = [] files_to_close = [] for file_path in all_files: file_obj = open(file_path, "rb")

我需要获取用户目录的内容并在请求中发送它们。不幸的是,我无法修改我请求的服务,因此我无法压缩所有文件并发送,我必须发送所有文件

对文件的总大小有限制,但对文件的大小没有限制。不幸的是,一旦我尝试打开太多文件,Python就会出错:
[Errno 24]打开的文件太多。以下是我当前的代码:

files_to_send = []
files_to_close = []
for file_path in all_files:
    file_obj = open(file_path, "rb")
    files_to_send.append(("files", (file_path, file_obj)))
    files_to_close.append(file_obj)

requests.post(url, files=files_to_send)

for file_to_close in files_to_close:
    file_to_close.close()

鉴于我的情况,有没有办法绕过这个打开文件的限制?

你能一次发送一个文件吗?或者可以分批发送?您可以在此处增加允许打开的文件数:

但总的来说,这很挑剔,不推荐

您可以批量发送请求,ala:

BATCH_SIZE = 10 # Just an example batch size
while len(all_files) > 0:
    files_to_send = []
    while len(files_to_send) < BATCH_SIZE:
        files_to_send.append(all_files.pop())
        file_obj = open(file_path, "rb")
    requests.post(url, files=files_to_send)
    for f in files_to_send:
        f.close()
一次打开太多文件通常是不好的做法

for file in all_files:
    with open(file, "rb") as outfile:
        requests.post(url, files=[outfile])