python中对文件和文件夹进行移动、复制、删除、重命名,主要依赖os模块和shutil模块,要死记硬背这两个模块的方法还是比较困难的,可以用一个例子集中演示文件的移动、复制、删除、重命名,用到的时候直接查询就行。

Key

关键词:Python 数据结构

常用的文件操作

#文件、文件夹的移动、复制、删除、重命名

#导入shutil模块和os模块
import shutil,os

#复制单个文件
shutil.copy("C:\\a\\1.txt","C:\\b")
#复制并重命名新文件
shutil.copy("C:\\a\\2.txt","C:\\b\\121.txt")
#复制整个目录(备份)
shutil.copytree("C:\\a","C:\\b\\new_a")

#删除文件
os.unlink("C:\\b\\1.txt")
os.unlink("C:\\b\\121.txt")
#删除空文件夹
try:
    os.rmdir("C:\\b\\new_a")
except Exception as ex:
    print("错误信息:"+str(ex))#提示:错误信息,目录不是空的
#删除文件夹及内容
shutil.rmtree("C:\\b\\new_a")

#移动文件
shutil.move("C:\\a\\1.txt","C:\\b")
#移动文件夹
shutil.move("C:\\a\\c","C:\\b")

#重命名文件
shutil.move("C:\\a\\2.txt","C:\\a\\new2.txt")
#重命名文件夹
shutil.move("C:\\a\\d","C:\\a\\new_d")

Advanced Usage

python实现对文件夹内所有特定格式文件的提取

字典可以用一个被大括号包围的以逗号分隔的键值对(key:value)列表来创建,例 如:[Math Processing Error],或者用字典构造器来构造。

import os
import shutil
path = '要提取的文件夹i地址'
new_path = '新文件地址'

for root,dirs,files in os.walk(path):
    for i in range(len(files)):
        if(files[i][-3:] == 'jpg'):
            file_path = root + '/' + files[i]
            new_file_path = new_path + '/' + files[i]
            shutil.mov(file_path,new_file_path)

os模块,即系统模块。主要用于处理文件和目录,其最大的特点是可以跨平台。 os.walk()方法就是在目录中游走输出,语法格式为:

os.wlak(top[,topdown = True[,onerror = None[,followlinks = False]]]) 总共有四个参数:

  1. top,产生三元组:文件夹路径,文件夹名字,文件名。
  2. topdown,True则自上而下,False则自下而上。
  3. onerror,是一个函数,调用一个参数,出现错误时继续wlak或者抛出异常停止walk。
  4. followlinks,true时可以通过软链接访问目录。

数据集切割

使用1:6的比例切分Train/Test

import os
import shutil
path = '/Users/sousei/PycharmProjects/Project/dataset/test/b_split'
np = '/Users/sousei/PycharmProjects/Project/dataset/test/a_split'
count = 0
rand = 0
for root,dirs,files in os.walk(path,True):
    print('root:%s'%root)
    # print('dirs:%s'%dirs)
    # print('files:%s'%files)
    print(len(files))
    
    for i in range(len(files)):
        rand += 1
        if(files[i][-3:] == 'jpg'):
            file_path = root + '/' + files[i]
            new_file_path = np + '/' + str(count) + '.jpg'
            # new_file_path = np + '/' + files[i]
            if(rand%7 == 0):
                shutil.move(file_path,new_file_path)
                print ("Move!")
                count += 1

参考