如何使用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行是什么意思,是替换一行,还是添加一行?您的问题陈述不清楚。是否要从第二行开始覆盖,或插入行,或替换行?第一个很简单,其他两个基本上需要重写文件的其余部分。