存储循环迭代数据

时间:2012-05-27 17:07:45

标签: python storage iteration

我正在玩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类似,我可以使用上述迭代的所有信息访问每个上传的文件吗?

我试图阅读文档,但我无法绕过一些迭代概念,抱歉:)

2 个答案:

答案 0 :(得分: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]

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

答案 1 :(得分:0)

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