Python搜索和替换行

时间:2014-11-30 22:50:47

标签: python

所以我无法找到问题的解决方案。我是Python的新手,似乎无法找到使其工作的方法。我要做的是遍历文件中的所有行,并针对每一行匹配多个不同的规则,并用用户内容替换整行。我尝试了多种方法,但没有一种方法能满足我的需求。

print ("File to perform check on:")

fileToSearch  = input( "> " )

for line in fileinput.input(fileToSearch, inplace=True):

    if 'foo' in line :

        if 'footimestwo' in line :

            sys.__stdout__.write('Wrong Answer. Try again:\n')

            textToReplace = input("")

            print(line.replace(line, textToReplace), end='')

这取代了用户输入的行,但没有保持不变的行;它只是用新行替换文件。

我尝试的另一种方法是:

print ("File to perform check on:")

fileToSearch  = input( "> " )

fin = open(fileToSearch, 'r') 

fout = open("newFile.txt", 'w') 

for line in fin:

    if 'foo' in line :

        if 'rom' in line :

            print ('Wrong Answer. Try again:')

            textToReplace = input( "> ")

            fout.write(textToReplace+'\n')

        else: 

            fout.write(line)
    else:

        fout.write(line)

for line in fin:

    if 'ram' in line :

        if 'foo' in line :

            print ('Wrong Answer. Try again:')

            textToReplace = input( "> ")

            fout.write(textToReplace+'\n')

        else: 

            fout.write(line)

    else:

        fout.write(line)

fin.close()

fout.close()

这会在新文件中进行更改,并保留第一个语句的其余行的状态,但不执行后续语句。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

关于您的第一段代码,您的elseif 'footimestwo' in line:没有if 'foo' in line :条件,因此您只输出要求用户更正的行

关于你的第二段代码,对于一个小文件,你最好只将文件的行存储在内存中:

smallFile = open('path/to/a/small/file.txt')
lines = smallFile.readlines()
for i in range(0, len(lines)):
    #do things, but replace lines by doing:
    lines[i] = newStuffForLine

另外,您需要重置文件光标:

bigFile = open('path/to/a/big/file.txt')
outputIntermediate = open('path/to/a/tmp/file.txt', 'w')
for line in bigFile:
     #do first set of things, putting outputs in outputIntermediate
outputIntermediate.close()
bigFile.close()
bigFile = open('oath/to/a/tmp/file.txt')
for line in bigFile:
    #do second set of things

在第二个示例中,通过使用中间文件,可以防止您在此答案的注释中描述的问题,只需编辑相同的行集。