【发布时间】: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。
关于如何实现这一点的任何建议。
【问题讨论】:
-
你真的应该看看
os.walk()。此处的文档:docs.python.org/2/library/os.html#os.walk
标签: python list for-loop directory file-copying