我创建了以下代码。此代码的目的是扫描指定的目录,检查哪些文件以数字结尾,然后执行我创建的以前的python程序,该程序将对以数字结尾的文件实现更改。
def my_main():
for filenames in os.listdir("dir/"):
if filenames.endswith("1.txt"):
execfile('Location of previous python program')
elif filenames.endswith("2.txt"):
execfile('Location of previous python program')
elif filenames.endswith("3.txt"):
execfile('Location of previous python program')
elif filenames.endswith("4.txt"):
execfile('Location of previous python program')
elif filenames.endswith("5.txt"):
execfile('Location of previous python program')
elif filenames.endswith("6.txt"):
execfile('Location of previous python program')
elif filenames.endswith("7.txt"):
execfile('Location of previous python program')
elif filenames.endswith("8.txt"):
execfile('Location of previous python program')
elif filenames.endswith("9.txt"):
execfile('Location of previous python program')
elif filenames.endswith("10.txt"):
execfile('Location of previous python program')
我正在寻求帮助,因为我可以改进我的代码,我希望它更干净而不是那么混乱,我也希望它能够被推广,而不仅仅是硬连线在某个目录中工作。
任何关于如何实现这一目标的建议都将受到赞赏。
谢谢。
答案 0 :(得分:1)
您可以使用正则表达式(来自re模块)来匹配文件名:
import re
def name_ends_with_digit(filename):
return re.match(r'\w*\d+.txt$', filename)
def main():
for filename in os.listdir("dir/"):
if name_ends_with_digit(filename):
execfile('Location of previous python program')
正则表达式检查字符串是否与模式匹配:
$
)以下简单示例:
import re
def name_ends_with_digit(filename):
return re.match(r'\w*\d+.txt$', filename)
def check(filename):
if name_ends_with_digit(filename):
print 'match'
else:
print 'no match'
check('test1.txt')
check('1.txt')
check('10.txt')
check('text1.txtyyy')
check('text.txt')
打印:
match
match
match
no match
no match
答案 1 :(得分:1)
您可以使用glob
查找您感兴趣的文件:
from glob import glob
files = glob("/dir/*[0-9].txt"):
同样str.endswith
需要一个参数元组,所以你需要一个if
而不是10:
ends = ( "1.txt","2.txt","3.txt"....)
if filenames.endswith(ends):
........
如果您只想查看是否有匹配使用iglob
:
from glob import iglob
if next(iglob("/dir/*[0-9].txt"), None):
............
iglob
返回一个迭代器,因此如果next(iglob("/dir/*[0-9]*.txt"), None)
没有返回默认None
,您知道至少有一个匹配。