2014-05-16 44 views
1

我想通过使用Requests和Glob将本地驱动器上的文件夹中的所有文件发布到某个Web URL。每次我将一个新文件发布到URL时,我想向字典添加一个新的“键值”项目,即“文件(值)”后从服务器输出的文件(键)的名称:如何使用文件作为键在Python中制作词典?

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' 

这是因为(我认为) “文件2”,如果类型 '字典' 的。无论如何抛出/更改之后的'file2'我把它只是一个文件名字符串?

+2

为什么不使用的文件名呢? –

+1

为什么要对'file2'进行任何投射/改变?为什么不使用'data',这已经是文件的名称? – Kevin

回答

7

您正在尝试使用文件对象,无文件名称。使用data的关键:

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