基于字符打印文件



我有一个包含数千个文件的目录(data)。每次我想选择three文件,只有一个字符不同的AB[C,D,E],并希望在选择的三个文件上执行一些计算。

我的文件在目录中如下所示

DT.ABC.2007.182.144018.txt
DT.ABD.2007.182.144018.txt
DT.ABE.2007.182.144018.txt
DT.ABC.2001.005.1444.txt
DT.ABD.2001.005.1444.txt
DT.ABE.2001.005.1444.txt
DT.ABC.2003.005.1244.txt
DT.ABD.2003.005.1244.txt
DT.ABE.2003.005.1244.txt

一开始我想打印

DT.ABC.2007.182.144018.txt
DT.ABD.2007.182.144018.txt
DT.ABE.2007.182.144018.txt

然后

DT.ABC.2001.005.1444.txt
DT.ABD.2001.005.1444.txt
DT.ABE.2001.005.1444.txt

,同样的过程将继续,直到读完目录中的所有文件。

我尝试了下面的代码:

import glob
for file in glob.glob('/data/*.txt'):
print(st)

但是它随机打印所有文件,而不是打印相同的三个文件(仅[C,D,E]字符不同)。我希望专家可以帮助我。提前谢谢。

下面是一个简单的函数,它列出文件并按文件名的第一个和第三个分量对它们进行分组。

def groupfiles(pattern):
files = glob.glob(pattern)
filedict = defaultdict(list)
for file in files:
parts = file.split(".")
filedict[".".join([parts[0], parts[2]])].append(file)
for filegroup in filedict.values():
yield filegroup

将文件分组并一次返回一个文件列表(yield是生成生成器的关键字;但你可以把它看作是return的一种替代品,只是函数在上次调用后继续在它离开的地方运行,而不是在下次调用它时从头开始运行),因此没有硬编码一次只能有三个文件的限制。

演示:https://ideone.com/w2Sf80

最新更新