Python移动指定后缀名的文件

来自linux中国网wiki
跳到导航 跳到搜索

功能需求

求通过python实现,在指定目录下遍历所有文件,将指定后缀的文件移动到另一指定目录中

最终代码

#!/usr/bin/python
#-*- coding: utf-8 -*-
#file mvnglog.py evan 记得给权限
# 30 06 * * * /data/mon/mvnglog.py >/dev/null 2>&1

import os,shutil

source_dir = '/data/logs/nginx' 
target_dir = '/data/logs/nginx/oldlog' 

if not os.path.exists(target_dir):
    os.makedirs(target_dir, 0755);

for root , dirs , files in os.walk(source_dir):
    for file in files:
        dirs[:] = []  #忽略当前目录下的子目录分析 不递归
        if file.endswith('.gz'):
            shutil.move( root+os.sep+file, target_dir )
            #shutil.copy( root+os.sep+file, target_dir )
            #print file

知识点

一开始想到那个可爱的python 有讲到相关的ow.walk 

os.walk这个某块是遍历一个目录常用的模块,它返回一个包含3个元素的元祖:dirpath,dirnames,filenames.dirpath是以string字符串形式返回该目录下所有的绝对路径;dirnames是以列表list形式返回每一个绝对路径下的文件夹名字;filesnames是以列表list形式返回该路径下所有文件名字。






还写 if os.path.splitext(i)[1] == '.log':  这种笨蛋的写法 

#-*- coding: utf-8 -*-
import os, shutil
target_dir = '/home/evan/test/new' #假定要拷贝到home目录
x = [ item for item in os.walk('/home/evan/test') ] #os.walk递归地遍历所有子文件夹
#返回的是一个list,list中每一个元素由3个部分:(path, dirs, files)
for path, dirs, files in x:
    for file in files:
        if file.endswith('.gz'): #找到以gz结尾的,copy之
            shutil.copy( path+os.sep+file , target_dir )

##目录源的文件不能已存在,不然会报错 already exists

移动文件(目录)
shutil.move("oldpos","newpos")  

os.sep    可以取代操作系统特定的路径分隔符。windows下为 '\\'

判断文件或目录是否存在:
os.path.exists(r"c:\python\hello.py") --> True

import os
def getFileName(path):
    ''' 获取指定目录下的所有指定后缀的文件名 '''

    f_list = os.listdir(path)
    # print f_list
    for i in f_list:
        # os.path.splitext():分离文件名与扩展名
        if os.path.splitext(i)[1] == '.log':
            print i

if __name__ == '__main__':
    path = '/home/xx/work/ETS/log/1/1'
    getFileName(path)


import os, shutil
target_dir = '/home/evan/test/new' #假定要拷贝到home目录
x = [ item for item in os.walk('.') ] #os.walk递归地遍历所有子文件夹
#返回的是一个list,list中每一个元素由3个部分:(path, dirs, files)
for path, dirs, files in x:
    for file in files:
        if file.endswith('.sh'): #找到以txt结尾的,copy之
        shutil.copy( path+os.sep+file , target_dir )

参考

Os.walk()与os.path.walk()

Shutil模块介绍和源码解读

https://zhidao.baidu.com/question/402320802.html

Python str endswith

Python os.makedirs() 方法

os.walk 忽略某个目录下的子目录【Python】

可以忽略目录的python walker

https://docs.python.org/2/library/stdtypes.html

查找指定目录下指定扩展名的文件,可以将信息打印和保存到文件中

python对文件及文件夹的一些操作

在Python中,如何移动文件 Python默认模块 os和shutil 实用函数 shutil — High-level file operations