如何通过while循环以Python方式避免此代码重复?

时间:2018-11-27 14:32:04

标签: python loops while-loop code-duplication

我想找到尚不存在的第一个文件名filtermyfile????.txt是一个数字)。这有效:

????

但是我不喜欢import os i = 0 f = 'myfile%04i.txt' % i while os.path.exists(f): i += 1 f = 'myfile%04i.txt' % i 的代码重复。

在此f = ...循环中,有没有Python的方法可以避免代码重复?

NB:正如Emulate a do-while loop in Python?的主要回答中所述,我已经使用while惯用语发布了一个令人满意的解决方案,但我仍然想知道这种特殊情况是否有更好的方法(因此,这不是对这个问题的误解。

5 个答案:

答案 0 :(得分:6)

您无需在此处遵循while范例,带有next()的嵌套生成器表达式可以起作用:

import os
from itertools import count
f = next(f for f in ('myfile%04i.txt' % i for i in count()) if not os.path.exists(f))
print(f)

答案 1 :(得分:3)

摆脱f变量。

import os

i = 0
while os.path.exists('myfile%04i.txt' % i):
    i += 1

答案 2 :(得分:0)

写问题的结尾时,我几乎找到了答案。经过一些修改,它可以工作:

import os
i = 0
while True:
    f = 'myfile%04i.txt' % i
    if not os.path.exists(f):
        break
    i += 1
print f

我仍然想知道是否还有更多的Python方法,也许使用迭代器,生成器,next(...)或类似的方法。

答案 3 :(得分:0)

这太简单了吗?

import os
f = 'myfile0000.txt'
while os.path.exists(f):
    i += 1
    f = 'myfile%04i.txt' % i

答案 4 :(得分:0)

您可以这样做:

import os
from itertools import count

cursor = count()
it = iter((path for path in map(lambda x: 'myfile%04i.txt' % x, cursor) if not os.path.exists(path)))
first = next(it, None)

if first:
    print(first)

输出

myfile0000.txt