2014-01-29 3 views
-1

파일을 한 줄씩 읽으려고합니다. 사전에서 발견되면 key를 value로 바꾸고 내용을 새 파일에 씁니다. 내가이 파일을 실행하려고 할 때마다파이썬에서 파일 읽기 및 쓰기

fout = open(output_file,"w+") 

with open(input_file, 'r') as fin: 
    for line in fin: 
     for key in sorted(Db): 
      if re.match(key,line): 
       line = re.sub(key,Db[key],line) ## line 246 
       fout.write(line) 
       break 
      else: 
       fout.write(line) 

, 내가지고있어 다음 역 추적 :

Traceback (most recent call last): 
    File "final.py", line 246, in <module> 
    if re.match(key,line): 
    File "c:\Python33\lib\re.py", line 156, in match 
    return _compile(pattern, flags).match(string) 
    File "c:\Python33\lib\functools.py", line 258, in wrapper 
    result = user_function(*args, **kwds) 
    File "c:\Python33\lib\re.py", line 274, in _compile 
    return sre_compile.compile(pattern, flags) 
    File "c:\Python33\lib\sre_compile.py", line 493, in compile 
    p = sre_parse.parse(p, flags) 
    File "c:\Python33\lib\sre_parse.py", line 724, in parse 
    p = _parse_sub(source, pattern, 0) 
    File "c:\Python33\lib\sre_parse.py", line 347, in _parse_sub 
    itemsappend(_parse(source, state)) 
    File "c:\Python33\lib\sre_parse.py", line 552, in _parse 
    raise error("nothing to repeat") 
sre_constants.error: nothing to repeat 

친절하게 내가 뭔가를 누락 알려 주시기 여기에 논리입니다. 미리 감사드립니다.

덕분에, 아난드

+0

잘못된 정규식 패턴처럼 보입니다. 'Db '의 내용을 확인해야합니다. 의심스러운 것을 발견하지 못하면 여기에 게시하십시오. –

답변

4

나는이 문제를 직접 시도하고 디버그한다고 생각합니다. 여기 내가하는 일이있다. 라인 (246) 전에 스크립트에 인쇄 문을 추가 : 출력에 따라

print key, 
print Db[key] 
print line 

, 조치를 취할 수 있습니다. 작동 여부를 테스트하려면 파이썬 인터프리터를 사용할 수 있습니다. 위의 인쇄 나가 가정 : 123



foo는 당신이 그것을 테스트 할 수

line = 'key 123' 
re.sub('key', 'foo', line) 
'foo 123' 

을 작동이 경우. 곧 문제가 무엇인지 알게 될 것입니다. 행운을 빕니다!

+1

+1 좋은'print' 디버깅을 위해서. 특히 파이썬을 배우면 OP가 무엇을하고있는 것 같습니까? : D – Kraay89

+0

뭔가를 디버깅하는 방법을 설명하는 것이 stackoverflow의 수용 가능한 대답인지는 궁금합니다. 사람들이 문제를 해결하는 방법을 아는 것이 종종 더 유용합니다. 그래서 그것이 제가 작성한 이유입니다. –

+0

아마 받아 들일 수있는 대답이 아니기 때문입니다. 그럼에도 불구하고 적어도 아주 유용한 코멘트에 있습니다. 이 방법을 사용하면 파이썬의 내부 구조에 대해 많은 것을 알게되었습니다 (아직 저는 경험있는 프로그래머 xD라고 말할 수있는 곳이 없습니다) – Kraay89