【发布时间】:2010-02-21 15:29:05
【问题描述】:
我有一个文本文件看起来像:
第一行 第二行 第三行 第四行 第五行 第六行我想用三个新行替换第三行和第四行。上面的内容会变成:
第一行 第二行 新线1 新线2 新线3 第五行 第六行如何使用 Python 做到这一点?
【问题讨论】:
我有一个文本文件看起来像:
第一行 第二行 第三行 第四行 第五行 第六行我想用三个新行替换第三行和第四行。上面的内容会变成:
第一行 第二行 新线1 新线2 新线3 第五行 第六行如何使用 Python 做到这一点?
【问题讨论】:
对于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)
【讨论】:
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)
【讨论】:
将整个文件作为行列表读取,然后将要删除的行替换为新的行列表:
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”。
【讨论】:
打开要写入的第二个文件,读取然后写入要复制的行,写入新行,读取要跳过的行,然后复制其余行。
【讨论】:
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)
希望对你有帮助
【讨论】:
enumerate() 可用,无需维护自己的计数器。
有几种方法可以实现这一目标
如果您的文件很小并且您的行是唯一的,您可以读取整个文件并替换该行,例如
f.read().replace("第三行", "new line1\nnew line2\nnew line3")
但是如果文件很大或者行不完整,只需逐行读取文件,并输出每一行,但在第三行输出三个不同的行
例如
for i, line in enumerate(f):
if i == 2:
o.write(myThreelines)
else:
o.write(line)
【讨论】: