2014-05-16 1 views
1

Я пытаюсь POST всех файлов в папке на моем локальном диске на определенный веб-URL с помощью запросов и глобуса. Каждый раз, когда я отправляю новый файл в URL-адрес, я хочу добавить в словарь новый элемент «ключ-значение», который является «именем файла (ключа), выводимым с сервера после POSTing файла (значения)»:Как сделать словарь в 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' 

Это потому, что (я думаю) "file2", если в 'Словаре' типа. Есть ли в любом случае, чтобы cast/alter '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 

 Смежные вопросы

  • Нет связанных вопросов^_^