使用Python fileinput.FileInput(...)时,如果该行不存在则尝试向文本文件添加一行时遇到问题

时间:2011-08-30 23:30:20

标签: python writetofile file-io

我尝试使用Python FileInput类编辑文本文件。首先,我将需要写入的行存储在Dictionary中。然后我遍历那个字典,如果字典[key]匹配该行中的任何一行,我用字典键值对替换该行。如果文件中不存在字典[key],那么我想在文件末尾写入该行;但是,这最后一部分不起作用而且不写入文件。

这是当前代码的样子:

def file_edit(properties,dst_path):

for key in properties.iterkeys():
    for line in fileinput.FileInput(dst_path, inplace=1):
        if str(key) + '=' in line:                      #<==== This works    
            print key + '=' + properties[key]           #<==== This works
        #The below condition checks that if the Dictionary[Key] is not there, then just print the line
        elif str(key) + '=' not in line and re.findall(r'[a-zA-Z0-9=:]+',line) is not None:
            print line.strip()              #<==== This seems to work
        else:                                      #<============THIS DOES NOT WORK
            print key + '=' + properties[key]      #<============THIS DOES NOT WORK
    fileinput.close()

file_edit({&#39;新密钥&#39;:&#39;某些价值&#39;,&#39;现有密钥&#39;:&#39;新值&#39;},SomeTextFile.TXT )

非常感谢任何投入。

谢谢!

1 个答案:

答案 0 :(得分:1)

re.findall()永远不会返回None,如果没有匹配则返回空列表。因此,您的第一个elif将始终如此。您应该使用re.search()代替(因为您未使用findall()的结果):

>>> re.findall(r'[a-zA-Z0-9=:]+', "(>'_')>")
[]
>>> re.findall(r'[a-zA-Z0-9=:]+', "(>'_')>") is not None
True
>>> re.search(r'[a-zA-Z0-9=:]+', "(>'_')>")
None
>>> re.search(r'[a-zA-Z0-9=:]+', "(>'_')>") is not None
False