2012-06-13 3 views
0

폴더에 많은 파일이 여러 개 있고 하나씩 처리하고 싶습니다. 사용자 식별자와 플로 카운트를 기록하기 위해 전역 사전이 있어야하지만, 이 코드는 두 번째 또는 세 번째 파일이 처리 될 때 마지막 파일에 대한 user_dict가 손실됩니다.파이썬에서 하나씩 파일을 처리하는 방법

두 번째 파일의 사용자 ID가 첫 번째 파일과 동일하면 새 파일 대신 동일한 플로 카운트를 할당해야하기 때문에 파일을 하나씩 열 때 하나의 사전이 계속 커지도록하려면 어떻게해야합니까? ? 각 파일의 크기가 매우 큰이기 때문에

for line in fd.readlines(): 
    obj = json.loads(line) 
    user = obj["host_dst"]["addr"] + '_' + str(obj["host_dst"]["port"]) 
    if user not in user_dict: 
     user_dict[user] = [] 
    user_dict[user].append(obj["params"]["flowcount"]) 

, 나는 다음, 하나 개의 파일에 모두 통합, 컴퓨터가 잠시 후에 프로세스를 종료합니다 처리 할 수있는 스크립트를 실행, 나는 그들에게 하나 하나를 처리 할 필요가 대신

답변

3

을하고

for filename in os.listdir(folderpath): 
    filepath = os.path.join(folderpath, filename) 
    fd = open(filepath, 'r') 

    # here is your code 
    for line in fd.readlines(): 
     .... 
그들 각각을 돌하는 루프에 대한 귀하를 사용
0

당신은 항상 당신의 코드에서

global user_dict 

을 선언 할 수 있습니다 ... 그러나 이것은 가장 좋은 방법입니까? 다음

class FileProcessor(object): 
    def __init__(self): 
     self.user_dict = dict() 

    def process_file(file_name): 
     .... 
     self.user_dict[]... 

과 : 어쩌면 당신은 클래스를 사용해야합니다 당신은 파이썬 스크립트에서 여러 파일을 열 수 있습니다

processor = FileProcessor() 
for file in files: 
    processor.process_file(file) 
관련 문제