Int*_*Day 1 python glob python-requests
我试图通过使用请求和全局将本地驱动器上的文件夹中的所有文件发布到某个Web URL.每次我将新文件发布到URL时,我想在字典中添加一个新的"键值"项,即"文件名(密钥),在POST文件后输出服务器(值)":
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
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
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'
Run Code Online (Sandbox Code Playgroud)
这是因为(我认为)"file2",如果是'dict'类型.无论如何,在我将它发送到文件名的字符串之后,是否要转换/更改'file2' ?
您正在尝试使用文件对象,而不是文件名.使用data的关键:
for data in text_files:
file2 = {'file': open(data)}
r = requests.post(url, files=file2)
outputs[data] = r.text
Run Code Online (Sandbox Code Playgroud)
更好的是,使用更有意义的名称,并使用with再次关闭打开的文件对象:
for filename in text_files:
with open(filename) as fileobj:
files = {'file': fileobj}
r = requests.post(url, files=files)
outputs[filename] = r.text
Run Code Online (Sandbox Code Playgroud)