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 我可以在哪里访问每个上传的文件以及上述迭代的所有信息?

我试图阅读文档,但我还不能理解一些迭代概念,抱歉:)

4

2 回答 2

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), ...))

请注意,您在此处遵循通过迭代迭代器来构建列表的模式。您可以使用列表推导有效地做到这一点,例如:

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

另请注意,fileandinput是非常糟糕的变量名,因为它们会掩盖内置函数file()input().

于 2012-05-27T17:58:29.377 回答
0
results = []
for i in range(5):
    file_data = {}
    file_data['a'] = i
    file_data['b'] = i**2
    results.append(file_data)
print results
于 2012-05-27T17:22:02.513 回答