我正在尝试使用 Requests 和 Glob 将本地驱动器上文件夹中的所有文件发布到某个 Web URL。每次我将新文件发布到 URL 时,我想向字典中添加一个新的“键值”项,即“文件名(键),发布文件后从服务器输出(值)”:
import requests, glob, unicodedata
outputs = {}
text_files = glob.iglob("/Users/ME/Documents/folder/folder/*.csv")
url = 'http://myWebsite.com/extension/extension/extension'
for data in text_files:
file2 = {'file': open(data)}
r = requests.post(url, files=file2)
outputs[file2] = r.text
这给了我错误:
Traceback (most recent call last):
File "/Users/ME/Documents/folder/folder/myProgram.py", line 15, in <module>
outputs[file2] = r.text
TypeError: unhashable type: 'dict'
这是因为(我认为)“file2”属于“dict”类型。在我将其发布为文件名字符串后, 是否可以转换/更改“file2”?
请您参考如下方法:
您正在尝试使用文件对象,而不是文件名称。使用data作为key:
for data in text_files:
file2 = {'file': open(data)}
r = requests.post(url, files=file2)
outputs[data] = r.text
更好的是,使用更有意义的名称,并使用 with 为您再次关闭打开的文件对象:
for filename in text_files:
with open(filename) as fileobj:
files = {'file': fileobj}
r = requests.post(url, files=files)
outputs[filename] = r.text
