【问题标题】:Copying and changing name of files in python在python中复制和更改文件名
【发布时间】:2019-03-16 11:19:25
【问题描述】:

我有一个名为 "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" 一样进入每个“port”目录文件并检查图像文件的数量

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

关于如何实现这一点的任何建议。

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多