繁体   English   中英

在python中复制和更改文件名

[英]Copying and changing name of files in python

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

现在,这些子目录“ 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。)

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)执行操作

关于如何实现的任何建议。

我不太了解您最终要在其中存储图像的新目录的命名约定中的逻辑,但是这里有一个使用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
--------------------------------------------------

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM