2014-01-29 252 views
-1

我試圖逐行讀取文件。如果在字典中找到,我想用值替換鍵值並將內容寫入新文件。這裏的邏輯:在Python中讀取和寫入文件

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語句:

print key, 
print Db[key] 
print line 

根據輸出,採取行動。 要測試什麼可以工作,你可以使用python解釋器。 假設你得到上面打印的:

關鍵

鍵123

你可以測試一下:

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

在這種情況下,它的工作原理。我相信你很快就會發現問題所在。祝你好運!

+1

+1,用於良好的「打印」調試。特別是在學習python時,OP似乎在做什麼...:D – Kraay89

+0

我實際上想知道是否解釋如何調試某些東西在stackoverflow上是可以接受的答案(我剛加入)。人們知道如何解決問題通常更有用,這就是我寫這個的原因。 –

+0

這可能不是一個可以接受的答案,因爲,讓我們面對它吧,事實並非如此。但它至少是一個非常有用的評論。使用這種方法學到了很多關於python的內部知識(但我還遠遠不能說我是一個有經驗的程序員xD) – Kraay89