在python中复制和更改文件名

时间:2018-10-11 11:29:13

标签: python list for-loop directory file-copying

我有一个名为“ ID” 的目录,其中包含多个子目录,例如“ 12”,“ 2”,“ 30”,“ 24” 等。每个子目录在其内部再次具有子目录,例如 12 在其内部具有名为“ 1port_50”,“ 1port_60”,“ 1port_80”,“ 3port_100”,“ log”的子目录“,”根“

现在这些子目录“ 1port_50”中又有多个图像(.jpg)文件,它们分别名为“ xyz_2018.jpg,pqd_201.jpg” 和“ 1port_60 ”具有 foo_174.jpg,bar_142.jpg,foobar_73.jpg 等。除了目录“ log”,“ root” (这两个文件夹均不包含任何内容和要丢弃的ID)。

我想做的是

1)进入目录“ 12” 并计算每种端口的出现次数

2)进入每个“端口”目录文件,例如进入“ 1port_50” 内部,并检查图像文件的数量

3)在其他位置创建一个名为“ 1port_1”的目录,例如“ D:/ Files / 1port_1 ”,然后复制 1port_abc 文件夹,并将这些图像文件重命名为 xyz_1.jpg,pqd_2.jpg (因为只有两张图像,这就是* _1和* _2的原因)

4)再次进入目录“ 1port_60” ,检查图像文件的数量,在位置“ D:/ Files / ”处创建另一个文件夹“ 1port_2”,然后重命名图像文件 foo_1.jpg,bar_2.jpg,foobar_3.jpg (由于1port_60中有3个.jpg文件,因此将其重命名为 _1, _2,* _ 3。)< / p>

5)对“ ID ”目录中的所有目录重复相同的过程。 这是我尝试但未通过的代码

最后,目录应该看起来像这样。

  D->Files->1port_1->xyz_1.jpg, pqd_2.jpg
  D->Files->1port_2->foo_1.jpg, bar_2.jpg, foobar_3.jpg
  D->Files->1port_3->ab_1.jpg, aar_2.jpg, qerr_3.jpg
  D->Files->3port_1->poi_1.jpg

import os
folder_list =os.listdir("D:/ID")
folder_list_prev = [e for e in folder_list if e not in ('log','root')]
folder_list = [x.rsplit('_',1)[0] for x in folder_list_prev]
distElementList=list(set(folder_list))
ty=[]
freq=[]

for v,k in Counter(folder_list).items():
  ty.append(v)
  freq.append(k)

for i in range(0,len(folder_list_prev)):
  for n in range(0,len(freq)):
    for m in range(1,freq[n]+2):
      os.makedirs(("D:\\Files\\"+folder_list_prev[m-1].split('_')[0]+"_"+str(m)))
      img_inside_dir = [f for f in os.listdir(('D:/ID/12'+folder_list_prev[m-1])) if f.endswith('.jpg')]

      for j in range(0,len(img_inside_dir)):
        copyfile('D:/ID/12'+folder_list_prev[m-1]+'/'+img_inside_dir[j],'D:Files/'+folder_list_prev[m-1].split('_')[0]+'_'+str(m)+'/'+img_inside_dir[j])

我在这里只尝试使用一个ID,即 12

关于如何实现此目标的任何建议。

1 个答案:

答案 0 :(得分:0)

对于您最终要在其中存储图像的新目录的命名约定,我不太了解,但是这里有一个使用os.walk()的示例。您必须实现其余逻辑以适合您的需求。

import os

start_dir = "/Users/jonas/testing/port_test/ID"

all_image_files = []
"""
all_image_files is a list of objects representing each image file on the following format:
{
    "parent_directory": path_to_parent_directory,
    "image_filename": name of image file
}
"""
print "Finding image files."
for root, dirs, files in os.walk(start_dir):
    # Find image files
    image_files = [f for f in files if f.endswith(".jpg")]
    if len(image_files) == 0:
        print "No image files in the current directory (%s)" % root
    else:
        print "Found image files in %s: %s" % (root, image_files)
        # Loop through images and save them to the all_image_files list
        for i in image_files:
            all_image_files.append({
                "parent_directory": root,
                "image_filename": i
            })

# Now you can do whatever logit it is that you need.
# I didn't quite understand what you wanted, so this
# just prints the objects.
print "\n====== Images found ======"
for image_object in all_image_files:
    print "Parent directory:", image_object["parent_directory"]
    print "Image filename:", image_object["image_filename"]
    print "Full path to image:", os.path.join(image_object["parent_directory"], image_object["image_filename"])
    print "--------------------------------------------------"

这会以我的示例目录结构打印出来:

Finding image files.
No image files in the current directory (/Users/jonas/testing/port_test/ID)
No image files in the current directory (/Users/jonas/testing/port_test/ID/12)
Found image files in /Users/jonas/testing/port_test/ID/12/1port_50: ['hello2.jpg', 'hello3.jpg', 'hello.jpg']
Found image files in /Users/jonas/testing/port_test/ID/12/1port_60: ['hello2.jpg', 'hello3.jpg', 'hello1.jpg']
Found image files in /Users/jonas/testing/port_test/ID/12/1port_70: ['hello1.jpg']
No image files in the current directory (/Users/jonas/testing/port_test/ID/2)
Found image files in /Users/jonas/testing/port_test/ID/2/1port_100: ['hello2.jpg', 'hello3.jpg', 'hello1.jpg']

====== Images found ======
Parent directory: /Users/jonas/testing/port_test/ID/12/1port_50
Image filename: hello2.jpg
Full path to image: /Users/jonas/testing/port_test/ID/12/1port_50/hello2.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/12/1port_50
Image filename: hello3.jpg
Full path to image: /Users/jonas/testing/port_test/ID/12/1port_50/hello3.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/12/1port_50
Image filename: hello.jpg
Full path to image: /Users/jonas/testing/port_test/ID/12/1port_50/hello.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/12/1port_60
Image filename: hello2.jpg
Full path to image: /Users/jonas/testing/port_test/ID/12/1port_60/hello2.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/12/1port_60
Image filename: hello3.jpg
Full path to image: /Users/jonas/testing/port_test/ID/12/1port_60/hello3.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/12/1port_60
Image filename: hello1.jpg
Full path to image: /Users/jonas/testing/port_test/ID/12/1port_60/hello1.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/12/1port_70
Image filename: hello1.jpg
Full path to image: /Users/jonas/testing/port_test/ID/12/1port_70/hello1.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/2/1port_100
Image filename: hello2.jpg
Full path to image: /Users/jonas/testing/port_test/ID/2/1port_100/hello2.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/2/1port_100
Image filename: hello3.jpg
Full path to image: /Users/jonas/testing/port_test/ID/2/1port_100/hello3.jpg
--------------------------------------------------
Parent directory: /Users/jonas/testing/port_test/ID/2/1port_100
Image filename: hello1.jpg
Full path to image: /Users/jonas/testing/port_test/ID/2/1port_100/hello1.jpg
--------------------------------------------------