2012-05-27 3 views
0

Я играю с CGI (загрузки файла формы),хранения для итерации цикла данных

и я получаю файлы в качестве объекта хранения, и я накоп лен его (вход) переменной.

Это простая итерация.

for file in input: 
    filepath = .... 
    filename, fileext = os.path.splitext(filepath) 
    file_real_name = .... 
    file_size = .... 
    file_type = ... 
    file_url = .... 
    file_short_name = ... 
    file_show_link = .... 

    # etc 

было бы легко, если бы это был только один файл, но что, если у меня есть более одного?

, как я могу иметь другое значение, которое хранит всю информацию в итерационный

как uploaded_files, где я могу получить доступ к каждому закачанный файл со всей информацией для вышеуказанной итерации?

Я пытался читать документы, но я не могу обернуть мою голову вокруг некоторых концепций итерационных еще, извините :)

+1

Попробуйте перечислить словари –

+0

@Alex Спасибо, пример будет замечательным. – static

ответ

1

Вы хотите использовать структуру данных для хранения данных. В зависимости от сложности, вы можете просто использовать список словарей:

files = [] 
for file in input: 
    files.append({ 
     "path": get_path(file), 
     "name": get_name(file), 
     "size": get_size(file), 
     ... 
    }) 

Или, если вы обнаружите, что вам нужно выполнять множество операций над данными, вы можете сделать свой собственный класс и сделать перечень объектов:

class SomeFile: 
    def __init__(self, path, name, size, ...): 
     self.path = path 
     ... 

    def do_something_with_file(self): 
     ... 

files = [] 
for file in input: 
    files.append(SomeFile(get_path(file), get_name(file), get_size(file), ...)) 

Обратите внимание, что здесь вы следуете шаблон построения списка итерируя над итератора. Вы можете сделать это эффективно используя list comprehension, например:

[{"path": get_path(file), "name": get_name(file), ...} for file in input] 

Также отметим, что file и input действительно плохие имена переменных, так как они будут маскировать внутренние команды file() и input().

+0

Спасибо, is get_path() метод, который я должен определить? – static

+0

@static Это просто код заполнителя - вы можете разместить любой код, который вы хотите, чтобы генерировать нужные вам значения. –

+0

Отлично, спасибо за подробный ответ. – static

0
results = [] 
for i in range(5): 
    file_data = {} 
    file_data['a'] = i 
    file_data['b'] = i**2 
    results.append(file_data) 
print results 
+0

Спасибо за помощь. – static

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