捕获行并用 python 修改它

Catch line and modify it with python

我是 python 的新手。 我目前正在尝试修改文件中的一行,这是在使用 linecache 捕获该行之后。

示例:

run_D = open('toto.dat','r')

lines = run_D.readlines()

print "Name of the file: ", run_D.name

seq=["%s'retrieve'"]

line_1 = linecache.getline('toto.dat', 51)

lines_runD = run_D.readlines()

run_D.close()

那么,我想修改这一行的内容:

lines_runD[50]="%s !yop \n".format(seq) #--> this part seems not working

fic = open('toto.dat','w')
fic.writelines(lines_runD)
fic.close()

我有这个错误:

IndexError: 列表索引超出范围

我尝试了很多格式类型,但遗憾的是它仍然无法正常工作。你有什么建议吗:)

谢谢。

我认为你混合了两个东西:linecachereadlines

1。行缓存

来自docs

The linecache module allows one to get any line from any file, while attempting to optimize internally, using a cache, the common case where many lines are read from a single file.

这意味着,您可以 读取 行号 51 linecache 非常容易:

import linecache
line_1 = linecache.getline('toto.dat', 51)
print line_1

2。阅读线

您可以使用以下代码实现相同的目的:

f = open( 'toto.dat' )
flines = f.readlines()
f.close( )
print flines[50]

然后,你可以修改第51行如下:

flines[50] = ' new incoming text!\n '
f = open( 'toto.dat', 'wt' )
for l in flines:
    f.write(l)
f.close( )

2.x。与

with 语句使处理文件更容易和更安全,因为它会为您关闭文件。

with open( 'toto.dat', 'r' ) as f:
    flines = f.readlines()
print flines[50] 

with open( 'toto.dat', 'wt' ) as f:
    for l in flines:
        f.write( l )

* 推荐

请注意,这些方法是低级的,一旦您真正了解自己在做什么,建议您将其用于学习基础知识或编写更复杂的函数。 Python 提供了许多输入输出库,具有许多有用的功能。只需搜索它们,您肯定会得到一些很好的例子。

例如检查以下问题以进一步学习:

How do I modify a text file in Python?

Search and replace a line in a file in Python

Open files in 'rt' and 'wt' modes