Удалить и вставить строки в текстовый файл - PullRequest
4 голосов
/ 21 февраля 2010

У меня текстовый файл выглядит так:

first line  
second line  
third line  
forth line  
fifth line  
sixth line

Я хочу заменить третью и четвертую строки тремя новыми строками. Вышеуказанное содержание станет:

first line  
second line  
new line1  
new line2  
new line3    
fifth line  
sixth line

Как я могу сделать это с помощью Python?

Ответы [ 6 ]

7 голосов
/ 21 февраля 2010

Для python2.6

with open("file1") as infile:
    with open("file2","w") as outfile:
        for i,line in enumerate(infile):
            if i==2:
                # 3rd line
                outfile.write("new line1\n")
                outfile.write("new line2\n")
                outfile.write("new line3\n")
            elif i==3:
                # 4th line
                pass
            else:
                outfile.write(line)

Для python3.1

with open("file1") as infile, open("file2","w") as outfile:
    for i,line in enumerate(infile):
        if i==2:
            # 3rd line
            outfile.write("new line1\n")
            outfile.write("new line2\n")
            outfile.write("new line3\n")
        elif i==3:
            # 4th line
            pass
        else:
            outfile.write(line)
4 голосов
/ 21 февраля 2010
import fileinput
myinsert="""new line1\nnew line2\nnew line3"""
for line in fileinput.input("file",inplace=1):
    linenum=fileinput.lineno()
    if linenum==1 or linenum>4 : 
        line=line.rstrip()
    if linenum==2:
        line=line+myinsert
    print line

Или, если ваш файл не слишком большой,

import os
myinsert=["new line3\n","new line2\n","new line1\n"]
data=open("file").readlines()
data[2:4]=""
for i in myinsert:data.insert(2,i)
open("outfile","w").write(''.join(data))
os.rename("outfile","file)
3 голосов
/ 21 февраля 2010

Считайте весь файл как список строк, затем замените строки, которые вы хотите удалить, новым списком строк:

f = open('file.txt')
data = f.readlines()
f.close()
data[2:4] = [
    'new line1\n',
    'new line2\n',
    'new line3\n']
f = open('processed.txt','w')
f.writelines(data)
f.close()

Обратите внимание, что нарезка списка начинается с нуля, и [2: 4] означает «элемент 2 до, но не включая элемент 4».

2 голосов
/ 21 февраля 2010

Откройте второй файл для записи, прочитайте и затем напишите строки, которые вы хотите скопировать, напишите новые строки, прочитайте строки, которые вы хотите пропустить, затем скопируйте остальные.

1 голос
/ 21 февраля 2010
import os
i = open(inputFilePath, 'r')
o = open(inputFilePath+"New", 'w')

lineNo = 0
for line in input:
    lineNo += 1
    if lineNo != 3:
        o.write(line)
    else:
        o.write(myNewLines)

i.close()
o.close()
os.remove(inputFilePath)
os.rename(inputFilePath+"New", inputFilePath)

Надеюсь, это поможет

0 голосов
/ 21 февраля 2010

Есть несколько способов достичь этого

  1. если файл небольшой, а строки уникальны, вы можете просто прочитать весь файл и заменить строку, например,

    f.read (). Replace ("третья строка", "новая строка1 \ nновая строка2 \ nновая строка3")

  2. Но если файл большой или строки не лишние, просто читайте через файл строку за строкой и выводите каждую строку, но в третьей строке выведите три разные строки

* 1015 например *

for i, line in enumerate(f):
    if i == 2:
        o.write(myThreelines)
    else:
        o.write(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...