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

2012 年 12 月 17 日
 ThunderEX
弱智问题一条,for line in open(*)里面一行一行的读文件,但其中突然想临时引用一下前一行的内容,该怎么引用捏?
7720 次点击
所在节点    Python
13 条回复
CoX
2012 年 12 月 17 日
搞个中间变量存一下
ritksm
2012 年 12 月 17 日
.seek(tell()-1)?....
ritksm
2012 年 12 月 17 日
不过中间变量好像方便些...
ritksm
2012 年 12 月 17 日
不对。。。忽略第一条。。。那个貌似是offset的不是行- -囧
ThunderEX
2012 年 12 月 17 日
@ritksm 送铜币……但是还是好奇有没有直接能引用回去的办法~
unfurl
2012 年 12 月 17 日
for n, line in enumerate(open(file, 'r').readlines())
likuku
2012 年 12 月 17 日
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 日
@likuku O(1)的操作活活被你搞成了O(N),内存占用也成了O(N)
ThunderEX
2012 年 12 月 17 日
@likuku 谢~这么看来还是中间变量好了……
geekard
2012 年 12 月 17 日
for line in open(*),这里的open()生成的是匿名文件对象,没法直接引用,能获得的就是下一行内容。即使有文件对象f,还需要知道上一行的字符数,这样才能seek()去。
ivenvd
2012 年 12 月 17 日
记得 open(*) 在这种语境已经返回迭代器而不是文件对象了,所以只能中间变量了吧。
xuwenbao
2012 年 12 月 18 日
>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'
sykp241095
2012 年 12 月 18 日
请问iterator支持回退么。

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

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

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

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

© 2021 V2EX