猿问

在文本文件的指定位置插入行

我有一个看起来像这样的文本文件:


blah blah

foo1 bar1

foo1 bar2

foo1 bar3

foo2 bar4

foo2 bar5

blah blah

现在我要'foo bar'在'foo1 bar3'和之间插入'foo2 bar4'。


这是我的方法:


import shutil


txt = '1.txt'

tmptxt = '1.txt.tmp'


with open(tmptxt, 'w') as outfile:

    with open(txt, 'r') as infile:

        flag = 0

        for line in infile:

            if not line.startswith('foo1') and flag == 0:

                outfile.write(line)

                continue

            if line.startswith('foo1') and flag == 0:

                flag = 1

                outfile.write(line)

                continue

            if line.startswith('foo1') and flag == 1:

                outfile.write(line)

                continue

            if not line.startswith('foo1') and flag == 1:

                outfile.write('foo bar\n')

                outfile.write(line)

                flag = 2

                continue

            if not line.startswith('foo1') and flag == 2:

                outfile.write(line)

                continue


shutil.move(tmptxt, txt)

这对我有用,但是看起来很丑。


www说
浏览 756回答 3
3回答

拉莫斯之舞

改编Alex Martelli的示例:import fileinputfor line in fileinput.input('1.txt', inplace=1): print line, if line.startswith('foo1 bar3'):     print 'foo bar'

开心每一天1111

回想一下,迭代器是一流的对象。它可以用于多个for语句。这是一种无需大量复杂外观的if语句和标志即可解决此问题的方法。with open(tmptxt, 'w') as outfile:    with open(txt, 'r') as infile:        rowIter= iter(infile)        for row in rowIter:            if row.startswith('foo2'): # Start of next section                 break            print row.rstrip(), repr(row)        print "foo bar"        print row        for row in rowIter:            print row.rstrip()
随时随地看视频慕课网APP

相关分类

Python
我要回答