2012-05-27 9 views
0

I는 (파일 형태로 업로드) CGI로 재생하고,루프 반복 데이터

저장하며 저장 대상으로서 파일을 수신하고 난 (입력) 변수에 sotred.

이것은 간단한 반복입니다.

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를 사용하여이 작업을 수행 할 수 있습니다 그들은 내장 명령 file()input() 마스크하므로

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

또한, fileinput는 정말 나쁜 변수 이름 참고.

+0

고맙습니다, 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