这可能是一个非常愚蠢的问题,但我在网上看了等等.并没有看到一个可靠的答案.
有没有一种简单的方法来做这样的事情?
lines = open('something.txt', 'r').readlines()
for line in lines:
if line == '!':
# force iteration forward twice
line.next().next()
<etc>
Run Code Online (Sandbox Code Playgroud)
在C++中很容易做到; 只需将迭代器增加一个额外的时间.在Python中有没有一种简单的方法可以做到这一点?
我只想指出,这个问题的主要目的不是"阅读文件等"和跳过事情.我更喜欢C++迭代器样式迭代.新标题也有点愚蠢,我真的不认为它反映了我的问题的本质.
ebo*_*ebo 34
尝试:
lines = iter(open('something.txt', 'r'))
for val in lines:
if val == "!":
lines.next()
continue
<etc>
Run Code Online (Sandbox Code Playgroud)
你可能想要赶上StopIteration某个地方.如果迭代器完成,就会发生这种情况.
这是短的,pythonic,并且工作:
with open('something.txt', 'r') as f: # or simply f = open('something.txt', 'r')
nobang = (line for line in f if line != '!\n')
for line in nobang:
#...
Run Code Online (Sandbox Code Playgroud)
编辑:
许多人观察到,这还不是解决方案.我能想到的最好的结果是本页面已有的内容:
with open('something.txt', 'r') as f:
for line in f:
if line == '!\n':
next(f,None) # consume next line
continue # skip this line
# ...
Run Code Online (Sandbox Code Playgroud)
file.readlines方法返回一个字符串列表,迭代列表将不允许您修改循环体中的迭代.但是,如果您先在列表中调用iter,那么您将获得一个可以在循环体中修改的迭代器:
lines = open('something.txt', 'r').readlines()
line_iter = iter(lines)
for line in line_iter:
if line == '!':
# force iteration forward twice
line_iter.next()
line_iter.next()
<etc>
Run Code Online (Sandbox Code Playgroud)
正如ebo指出的那样,文件对象本身就是一个迭代器,所以你可以通过不调用readlines并省去对iter的调用来获得相同的效果.
| 归档时间: |
|
| 查看次数: |
60013 次 |
| 最近记录: |