2014-07-14 2 views
-3

아래 코드는 함수를 통해 텍스트 파일을 전달하고 사용자 이름과 비밀번호가 포함 된 새로 만든 세 번째 파일을 출력합니다 (Python - 파일에서 다른 파일로 쓰기 (파일 정렬이 동일하지 않음)

).

파일 1 형식 (사용자 이름)

Username:ID:Name:Hash::: 

파일 2 형식 (비밀번호)

Hash:Password 

파일 3 형식 (새로 생성 된 출력 파일)

Username:Password 

입력 파일이 정렬되지 않아야 출력 파일 결과가 정렬되지 않고 올바르지 않을 때까지 현재 현재 코드가 완벽하게 작동합니다. 나는 기본적으로 입력 파일의 사용자 이름과 암호를 새 파일에 입력해야하며 올바르게 정렬되지 않으면 망칠 필요가 없습니다.

from itertools import izip 

def merge(f1,f2,f3): 

    with open(f3, "a") as outputFile: 

     for line_from_f1, line_from_f2 in izip(open(f1), open(f2)): 

     username = line_from_f1.split(':')[0] 
     password = line_from_f1.split(':')[1] 
     outputfile.write("%s:%s" % (username, password)) 

merge("input1.txt", "input2,txt", "output.txt") 

나는 사전을 갈 수있는 방법입니다하지만 지금까지 내 시도가 성공 다양한 키 오류를받지 못하고 있다고 생각. 어떤 도움을 주시면 감사하겠습니다. :)

최저

하지만이 키 오류를 생성합니다

def merge(f1,f2,f3): 

    d1 = {} 
    with open(f1, 'r') as f: 
     for line in f: 
     d1[line.split(':')[3]] = line.split(':')[0] 

    d2 = {} 
    with open(f2, 'r') as f: 
     for line in f: 
     d2[line.split(':')[0]] = line.split(':')[1] 

    with open(f3, 'w') as f: 
     for key in d1: 
     f.write("{}:{}\n".format(d1[key], d2[key])) 
당신의 시도의 최고, 어떻게 정확하게는 (성공 [최소한의 예]를 제공하지 않았다
+1

(http://stackoverflow.com/help/mcve) 및 전체 오류 추적)? – jonrsharpe

답변

1
dict1 = {} 
list1 = [] 
fs = ":" 
with open("input1.txt") as f: 
    for line in f: 
     list1.append(line.rstrip('\n').split(fs)) 

with open("input2.txt") as f: 
    for line in f: 
     (key, val) = line.rstrip('\n').split(fs) 
     dict1[key] = val 

with open("output.txt","w") as f: 
    for username, id, name, hash, b1, b2, b3 in list1: 
     if hash in dict1: 
      f.write("%s:%s\n"%(username,dict1[hash])) 
+0

감사합니다 - 모든 사용자 이름과 암호가 페어링 된 경우 작동하지만 사용자 이름을 크랙 할 수없는 경우 다음 암호를 사용하여 해당 사용자 이름과 일치하며 암호가없는 사용자 이름은 제거되지 않습니다. – Eric1989

+0

정말입니까? 그것은 나를 위해 작동합니다. –

+0

Nope - 모든 암호가 손상되었을 때 제대로 작동하지만 균열을 일으키지 않는 가짜 해시가 포함 된 첫 번째 파일에 테스트 계정을 추가하면 함수가 다음 균열 암호와 쌍을 이룹니다. – Eric1989

관련 문제