每x个文件;创建新目录并移动文件-使用Python

Ken*_*nyC 3 python directory move shutil

我有一个包含数千个文件的目录。我希望能够在较大的Director内创建子目录,并将恰好150个文件(按扩展名过滤)移动到每个新创建的目录中。我希望获得一些指导以使我前进。这是我开始的琐事:

wd = os.chdir(r'foobar')

allgzs=[]

for file in os.listdir(wd):
    if file.endswith('asc.gz'):
       allgzs.append(file)

for gz in allgzs:


# For every 150 .gz files: 
# Create directory -- os.mkdir?
# Move files into directory  -- shutil.move?
Run Code Online (Sandbox Code Playgroud)

Mu *_*ind 5

我想出了一个grouper函数,可以在运行以下命令时产生较长的序列n

import itertools
def grouper(S, n):
    iterator = iter(S)
    while True:
        items = list(itertools.islice(iterator, n))
        if len(items) == 0:
            break
        yield items
Run Code Online (Sandbox Code Playgroud)

从那里,您可以非常简洁地执行您想要的操作:

import glob, os, shutil
fnames = sorted(glob.glob('*asc.gz'))
for i, fnames in enumerate(grouper(fnames, 150)):
    dirname = 'batch%d' % i
    os.mkdir(dirname)
    for fname in fnames:
        shutil.move(fname, dirname)
Run Code Online (Sandbox Code Playgroud)