for line in open(*)里面怎么倒回去读上一行?

2012-12-17 15:36:35 +08:00
 ThunderEX
弱智问题一条,for line in open(*)里面一行一行的读文件,但其中突然想临时引用一下前一行的内容,该怎么引用捏?
6613 次点击
所在节点    Python
13 条回复
CoX
2012-12-17 15:39:53 +08:00
搞个中间变量存一下
ritksm
2012-12-17 15:44:17 +08:00
.seek(tell()-1)?....
ritksm
2012-12-17 15:44:58 +08:00
不过中间变量好像方便些...
ritksm
2012-12-17 15:46:01 +08:00
不对。。。忽略第一条。。。那个貌似是offset的不是行- -囧
ThunderEX
2012-12-17 15:59:59 +08:00
@ritksm 送铜币……但是还是好奇有没有直接能引用回去的办法~
unfurl
2012-12-17 16:02:34 +08:00
for n, line in enumerate(open(file, 'r').readlines())
likuku
2012-12-17 16:15:48 +08:00
open()打开的文件对象没找到index属性,但可以转换为list对象后就可以使用index()来获得当前元素对应的index,当然也可以直接使用list[index]来访问当前元素,或者list[index-1]来访问前一个元素.

line_src = open ("t")
line_list = line_src.readlines()
for line in line_list:
index_currnet_line = line_list.index(line)
if index_currnet_line > 0:
last_line = line_list[index_currnet_line-1]
chemhack
2012-12-17 16:21:37 +08:00
@likuku O(1)的操作活活被你搞成了O(N),内存占用也成了O(N)
ThunderEX
2012-12-17 16:50:40 +08:00
@likuku 谢~这么看来还是中间变量好了……
geekard
2012-12-17 16:54:16 +08:00
for line in open(*),这里的open()生成的是匿名文件对象,没法直接引用,能获得的就是下一行内容。即使有文件对象f,还需要知道上一行的字符数,这样才能seek()去。
ivenvd
2012-12-17 17:28:17 +08:00
记得 open(*) 在这种语境已经返回迭代器而不是文件对象了,所以只能中间变量了吧。
xuwenbao
2012-12-18 08:59:33 +08:00
>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'
sykp241095
2012-12-18 17:14:10 +08:00
请问iterator支持回退么。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/55126

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX