如何使用python写入文件的第n行
我想在特定行号处写一行,我的文件包含以下数据如何使用python写入文件的第n行,python,Python,我想在特定行号处写一行,我的文件包含以下数据 one two three four five Six Seven Eight Nine Ten Eleven 这是我的密码- f = open("file.txt",'r+') for i, line in enumerate(f): if i == 2: f.write("Added at 2nd line") elif i == 3: f.write("Added at 2nd line")
one
two
three
four
five
Six
Seven
Eight
Nine
Ten
Eleven
这是我的密码-
f = open("file.txt",'r+')
for i, line in enumerate(f):
if i == 2:
f.write("Added at 2nd line")
elif i == 3:
f.write("Added at 2nd line")
elif i > 29:
break
f.close()
运行上述代码后,我得到如下O/p
one
two
three
four
five
Six
Seven
Eight
Nine
Ten
ElevenAdded at 2nd line
请帮助我如何写信给特别;文件中的ar编号我已经尝试过了,它确实有效,而且速度非常快 仔细研究一下这个概念 如果不是这样,那么这就是你需要做的: Python中的文件是迭代器,这意味着它们可以循环,也可以对其应用迭代操作 例如,要获得每5行,将是:
import itertools
with open(filename, 'r') as f:
fifthlines = itertools.islice(f, 0, None, 5)
for line in fifthlines:
# do something with line
要跳过一系列行,请使用noop for循环;这里我们跳过10行,然后读10:
for _ in itertools.islice(f, 0, 10):
pass
for line in itertools.islice(f, 0, 10):
# do something with this 10th line
通过itertools库和Python教程的快速浏览,您可以很容易地理解脚本的其余部分。您可以使用fileinput:
import fileinput
for line in fileinput.input('file.txt', inplace=True):
if fileimput.filelineno() == 2:
print line.replace(line, 'Added at 2nd line\n'),
或者您必须编写第二个文件:
with open('file.txt', 'r') as input_file, open('new_file.txt', 'w') as output_file:
for line in input_file:
if input_file.index(line) == 1:
output_file.write('Added at 2nd line\n')
else:
output_file.write(line)
永远不要尝试在您正在读取的同一文件中写入,除非它是具有恒定大小块的直接(二进制)文件!你可能会把它打破,几乎无法恢复 在您的用例中,情况不会太糟。当您使用file对象的迭代器接口时,Python读取整个块(实际上是整个文件),文件指针立即定位在末尾。最后一行是一行一行,但是当你写的时候,你(希望)在文件的末尾写。如果您使用
readline
读取文件,您的写入将覆盖以下行
正确的方法是重命名输入文件,以只读方式打开它,以写方式打开新文件,随意复制和修改,如果可以,则删除输入文件
当文件很小时,另一种简单的方法是加载内存中的所有内容,在写回所有内容之前倒回文件
f = open("file.txt",'r+')
lines = f.readlines()
f.seek(0)
for i, line in enumerate(lines):
if i == 2:
f.write("Added at 2nd line")
elif i == 3:
f.write("Added at 2nd line")
elif i > 29:
break
f.close()
你的问题我不太清楚,但我就是这样理解的。我尝试使用enumerate和新变量line_num(您的行号)的方法,您可以在脚本中或从终端手动设置:
main_file = open('file.txt', 'r')
lines = []
line_num = 4 # if you want set it manually from script
#line_num = input('Type the line number: ') # if you want to set it from terminal
for i, line in enumerate(main_file):
if i+1 != line_num:
str_line = line
else:
# enumerate starts from zero so increment i by 1
str_line = line.rstrip('\n') + ' (added at %s line)\n' % (i+1)
lines.append(str_line)
if i > 29:
break
main_file.close()
with open('file.txt', 'w') as main_file:
main_file.writelines(lines)
我将使用文件分为两个部分:
-首先是读取文件行并将其添加到行列表(添加编辑行)
-第二个块是将行写入files.txt writelines方法,在with语句中结束。第n行是什么意思,是替换一行,还是添加一行?您的问题陈述不清楚。是否要从第二行开始覆盖,或插入行,或替换行?第一个很简单,其他两个基本上需要重写文件的其余部分。