1

我是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:列表索引超出范围

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

谢谢你。

4

1 回答 1

1

我认为你混合了两件事:linecachereadlines.

1.线缓存

文档

linecache 模块允许从任何文件中获取任何行,同时尝试使用缓存进行内部优化,这是从单个文件中读取多行的常见情况。

这意味着,您可以很容易地读取第 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 提供了许多输入输出库,具有许多有用的特性。只需搜索它们,您肯定会得到一些很好的例子。

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

如何在 Python 中修改文本文件?

在 Python 中搜索和替换文件中的一行

以“rt”和“wt”模式打开文件

于 2016-06-30T16:00:42.013 回答