捕获行并使用python

时间:2016-06-24 15:17:20

标签: python linecache

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

我尝试了很多格式类型,但遗憾的是它仍无法正常工作。你有一些提示:)

谢谢。

1 个答案:

答案 0 :(得分:1)

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

1。 linecache

来自docs

  

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

这意味着,您可以非常轻松地使用linecache 读取第51行

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

2。 readlines方法

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

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