在python中读取和写入文件

时间:2014-01-29 07:54:34

标签: 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

如果我遗失了什么,请告诉我。提前谢谢。

谢谢, 阿南德

1 个答案:

答案 0 :(得分:4)

我认为您应该自己尝试调试此问题。这就是我要做的。 在第246行:

之前在脚本中添加print语句
print key, 
print Db[key]
print line

根据输出,采取措施。 要测试可行的方法,可以使用python解释器。 假设你没有上面的印刷品:

  


     FOO
     关键123

你可以测试一下:

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

在这种情况下,它有效。我相信你很快就会发现问题所在。祝你好运!