我有一个目录,其文件格式如下:LnLnnnnLnnn.txt
其中L=字母,n=数字。E、 g:p2c0789c001.txt
我想根据第二个数字(即0789)是奇数还是偶数来分隔这些文件。在
只有在第二个数字在0001-0009之间时,我才能使用代码:
odd_files = []
for root, dirs, filenames in os.walk('.'):
for filename in fnmatch.filter(filenames, 'p2c000[13579]*.txt'):
odd_files.append(os.path.join(root, filename))
这将返回文件:['./p2c0001c054.txt', './p2c0003c055.txt', './p2c0005c056.txt', './p2c0007c057.txt', './p2c0009c058.txt']
有什么建议,我如何才能使这对任何给定的四位数有效?在
最简单的解决方案是扩展通配符以匹配更广泛的内容。在
为此,我可能会做一些类似的事情:
这将匹配值之前的任何字符,它将匹配通配符类中的任何奇数值,然后它将接受任何匹配的内容。在
这有点恶心,因为它是aaaaaaaaa3alkjf达尔克JFSHGLKJZSDHFGS.txt会匹配的,这是超级恶心。如果您知道您正在遍历的目录中的数据得到了很好的控制,那就可以了。一个更好的解决方案可能是多指定一些东西。这可以通过以下表达式实现:
^{pr2}$在fnmatch.filter方法使用Unix样式通配符。这意味着您可以使用以下选项:
是吗?-匹配任何单个字符 *-匹配任何东西,从无到有 []—这与一类事物相匹配,使用-表示范围和!排除
这样行吗?在
如果有点麻烦,您可以将其转换为生成器并手动编写测试代码:
如果您的测试变得非常难以简洁地表达,请用显式的测试代码替换
if filename ...
行。在相关问题 更多 >
编程相关推荐