使用Python将特定文件移动到特定文件夹

时间:2018-05-26 12:53:23

标签: python

我想创建文件并将文件从一个文件夹移动到另一个文件夹,这样就可以在新创建的文件夹中创建一个新文件夹来创建120个文件。

文件将具有特定的命名结构:X.0.JPEGX.1.JEPGX.1200.JPEG

例如://path     创建//path//New_folder     在此之后,将在此"New_folder"下创建文件夹,120个文件将移至"//path//New_folder//F1//(X.0 to X.119)"旁边的新文件夹"//path//New_folder//F2//(X.120 to X.239)" ...

这是我目前的代码,问题是它随机移动文件。

import os, os.path, shutil
folder = './path' 

images = [
            filename 
            for filename in os.listdir(folder) 
            if os.path.isfile(os.path.join(folder, filename))
         ]  

global no
no = int(len(images)/120) + 1

img1 = images[0]

global folderName
folderName = img1.split('.')[0]

newDir = os.path.join(folder, folderName)
global folderCount
folderCount = 0

if not os.path.exists(newDir):

    os.makedirs(newDir)#folder created
    folderLimit = 120
    global imageCount
    imageCount = 0
    for image in images:
        if imageCount == folderLimit:
            imageCount = 0
        if imageCount == 0:
            folderCount = folderCount + 1
            newfoldername = os.path.join(newDir, folderName + '(' + str(folderCount) + ')' )
            os.makedirs(newfoldername)
        existingImageFolder = os.path.join(folder, image)
        new_image_path = os.path.join(newfoldername, image)
        shutil.move(existingImageFolder, new_image_path)
        imageCount = imageCount + 1

1 个答案:

答案 0 :(得分:0)

这种“随机性”的原因是os.listdir(folder)如何工作 - 它以随机顺序返回文件名。 From documentation

  

os.listdir(path)

     

返回一个列表,其中包含path给出的目录中的条目名称。 列表按任意顺序排列。它不包含特殊条目'.''..',即使它们存在于目录中。

因此,您需要做的是对os.listdir返回的结果进行排序。

import os, os.path, shutil
folder = './path' 

lis_dir = [f for f in os.listdir(folder) if ('.' in f and f.split('.')[1].isnumeric())]
images = sorted(lis_dir, key=lambda x: int(x.split('.')[1]))

folderLimit = 120
folderName = images[0].split('.')[0]
newDir = os.path.join(folder, folderName)
folderCount = 0

if not os.path.exists(newDir):
    os.makedirs(newDir)#folder created

for imageCount, image in enumerate(images):
    if (imageCount % folderLimit) == 0:
        folderCount += 1
        newfoldername = os.path.join(newDir, folderName + '(' + str(folderCount) + ')' )
        os.makedirs(newfoldername)
    existingImageFolder = os.path.join(folder, image)
    new_image_path = os.path.join(newfoldername, image)
    shutil.move(existingImageFolder, new_image_path)