复制文件到一个文件夹并进行排序copy_imgs_to_dir

复制文件到一个文件夹并进行排序copy_imgs_to_dir

文件存储方式

|--parentdir
|----copy_imgs_to_dir.py
|----Video0
|--------xxx0.mp4
|--------xxx1.mp4
|----Video1
|--------xxx0.mp4
|--------xxx1.mp4
|----Video2
|--------xxx0.mp4
|--------xxx1.mp4

创建文件名为:copy_imgs_to_dir.py

import os		#专门用于文件处理
import sys        #system系统处理文件
filedir = os.path.dirname(sys.argv[0])      #获取脚本所在目录   sys.argv[0]表示获取脚本的位置
os.chdir(filedir)       #将脚本所在的目录设置为工作目录
wdir = os.getcwd()        #.getcwd() 可以直接输出
print('当前工作目录:{}\n'.format(wdir))      #打印当前工作目录  输出格式一定要用.format()

import shutil   #高级文档处理

image_dir = 'Images_Repo'        
if not os.path.exists(image_dir):   #检测是否存在image_dir文件夹
        os.mkdir(image_dir)        #创建image_dir文件夹

specified_id = 1            
files = os.listdir(image_dir)
file_idxs = [int(file.split('.')[0]) for file in files]
idx = max(file_idxs) if len(file_idxs) != 0 else 1
idx = max(idx+1, specified_id)

f = open(image_dir +'_info.txt', 'a+')
f.seek(0,0)  #移动到文件头
lines = f.readlines()
print(len(lines))
f.seek(0,2)  #移动到文件尾
existed_img = [os.path.basename(line.split(' ')[0]) for line in lines]    
i, j = 0, 0
for parent, dirs, files in os.walk('DATA'):         #浏览整个DATA文件夹 
	parent_base = os.path.basename(parent)         #parent指的是包含脚本的文件夹
	if ('Picture' in parent_base):                  #每次只能处理一个,要么处理文件夹,要么处理文档
		for file in files:
			if file not in existed_img:
				file_ext = file.split('.')[-1]
				new_name = str(idx).zfill(8) + '.' + file_ext
				image_src = os.path.join( parent, file)          #os.path.join()函数用于路径拼接文件路径,例如:parent/***/file
				image_dst = os.path.join( image_dir, new_name)   
				if not os.path.exists(image_dst):    #os.path.exists() 判断文件是否存在
					shutil.copy(image_src, image_dst)     #将老文件复制到新文件中,老文件-->新文件
					idx += 1
					j += 1
					new_line = image_src + '   ------>   ' +image_dst +'\n'
					f.write(new_line)
					print('本次复制了文件{:25s}到文件{:25s}'.format(file, new_name))     #最大的特点就是不用理会数据类型的问题
			else:
				i += 1
				print('文件{:25s}此前已经被复制'.format(file))
f.close()
print('本次跳过了{:6d}个此前已被复制的文件'.format(i))
print('本次复制了{:6d}个文件'.format(j))
				
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2160.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js正則表達式语法

    js正則表達式语法

    2021年12月15日
    31
  • Android Studio中使用Gradle打包

    Android Studio中使用Gradle打包

    2022年2月3日
    146
  • 面试题之  什么是不可变类? 为什么String是不可变类? 如何创建一个不可变类

    面试题之  什么是不可变类? 为什么String是不可变类? 如何创建一个不可变类面试题:     什么是不可变类? 为什么String是不可变类? 如何创建一个不可变类不可变类当类的对象创建后,它的值就不可以再更改了相比于可变对象,不可变对象有很多优势不可变对象可以提高String Pool(字符串常量池)的效率和安全性。如果你知道一个对象是不可变的 ,那么需要拷贝对象的内容时就不用复制它本身而只复制它的地址,复制地址(通常一个指针的大小)需要很小的内存,效率…

    2022年6月13日
    29
  • SPI协议_Verilog实现「建议收藏」

    SPI协议_Verilog实现「建议收藏」SPI协议_Verilog实现概述:通过Verilog代码+仿真的形式来理解SPI的时序,此处只写了主机发送,从机接收的代码,后待续。。。SPI协议简介●SPI接口介绍  SCK:时钟信号,由主设备产生,所以主设备SCK信号为输出模式,从设备的SCK信号为输入模式。  CS:使能信号,由主设备控制从设备,,所以主设备CS信号为输出模式,从设备的CS信号为输入模式。  MOSI:主设备数据输出,从设备数据输入,所以主设备MOSI信号为输出模式,从设备的MOSI信号为输入模式。  MISO:主设

    2022年10月15日
    0
  • 关于Http_build_query的用法

    关于Http_build_query的用法

    2021年11月8日
    45
  • nextSibling previousSibling

    nextSibling previousSibling
    1/nextSibling属性
           该属性表示当前节点的下一个节点(其后的节点与当前节点同属一个级别);如果其后没有与其同级的节点,则返回null。
          需要特别注意的是:该属性在不同的浏览器中的执行结果并不都相同,见下面例示:
         先来看一个例子:

            
    2022年7月13日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号