Python复制目录结构脚本代码分享


Posted in Python onMarch 06, 2015

引言

有个需要,需要把某个目录下的目录结构进行复制,不要文件,当目录结构很少的时候可以手工去建立,当目录结构复杂,目录层次很深,目录很多的时候,这个时候要是还是手动去建立的话,实在不是一种好的方法,弄不好会死人的。写一个python脚本来处理吧。

首先了解

写python脚本前,先了解几个东西

#!/usr/bin/python

这个东西写过脚本的人都知道,用来标明该脚本的执行器,类似的还有
#!/bin/bash       通过bash来执行

#!/usr/local/php/bin/php 通过php执行器来执行    

 
# -*- coding: utf-8 -*-

这个是设置脚本的编码格式,不然非英文可能会出现乱码

匿名函数lambda

#lambda很好用,创建匿名函数很方便

g = lambda x,y : x+y

g(3,5) #返回8

匿名函数分为四部分,标识 lambda,分号 :,参数 x,y,操作 x+y

除了这个之外,还有函数map、filter一个进行映射,一个进行过滤

__name__=="__main__"

一个文件就是一个模块,在python中每个模块都有一个__name__属性,属性的值取决于如何使用该模块,一般有两种使用方式,直接在命令行运行,这个时候__name__值为__main__,当import使用的时候,__name__值就是当前模块的名称(不带扩展名),因此可以通过这个判断是否是直接在命令行运行程序,以便做一些脚本使用。
import os

import sys

还有这两个模块,os包含一些操作系统功能,比如说遍历文件夹,拼接路径等等,sys模块包含系统函数,我这里只用来获取脚本后面的参数

编码

#!/usr/bin/python

# -*- coding: utf-8 -*-

#Filename:floders.py
import os

import sys
source = os.path.realpath(sys.argv[1]) 

target = os.path.realpath(sys.argv[2])
def isdir(x):

    return os.path.isdir(x) and x != '.svn'

def mkfloders(src,tar):

    paths = os.listdir(src)

    paths = map(lambda name:os.path.join(src,name),paths)

    paths = filter(isdir, paths)

    if(len(paths)<=0):

        return

    for i in paths:

        (filepath, filename)=os.path.split(i)

        targetpath = os.path.join(tar,filename)

        not os.path.isdir(targetpath) and os.mkdir(targetpath)

        mkfloders(i,targetpath)
if __name__=="__main__":

    if(os.path.isdir(source)):

        if(target.find(source) == 0):

            print("不能将生成的新目录放在源目录下")

        else:

            if not os.path.isdir(target):

                os.mkdir(target)

            mkfloders(source,target)

    else:

        print("源文件夹不存在")

使用

使用很简单:

#在当前文件夹下执行

./folders.py ./ /tmp/yyyyy
#执行完之后就会在/tmp下创建yyyyy目录,目录中包含上面的第一个文件夹中的目录结构

这个地方有两个要注意的地方,不能将创建后的目录放在要复制的目录中或者其子目录中

总结

在做这个的时候遇到了这个问题 /usr/bin/python^M: bad interpreter: No such file or directory ,这个问题看样子是编码的问题,在每行后面添加了个字符,查资料后,原来是由于我从windows下直接把程序复制到linux下的编码出现了问题,解决方法很简单:vi folders.py之后,在命令行下输入

:set ff #结果表示编码平台,应该是fileformat=dos
:set fileformat=unix #设置编码到unix平台
:set ff #这个时候再去查看文件编码,应该是fileformat=unix
Python 相关文章推荐
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 Python
python如何统计序列中元素
Jul 31 Python
python range()函数取反序遍历sequence的方法
Jun 25 Python
Pycharm更换python解释器的方法
Oct 29 Python
redis数据库及与python交互用法简单示例
Nov 01 Python
python入门之井字棋小游戏
Mar 05 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
如何用python插入独创性声明
Mar 31 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
Python 语言实现六大查找算法
Jun 30 Python
python 闭包函数详细介绍
Apr 19 Python
python获取android设备的GPS信息脚本分享
Mar 06 #Python
Python写的英文字符大小写转换代码示例
Mar 06 #Python
Python脚本实现集群检测和管理功能
Mar 06 #Python
Python守护进程(daemon)代码实例
Mar 06 #Python
Python类方法__init__和__del__构造、析构过程分析
Mar 06 #Python
Python列表生成器的循环技巧分享
Mar 06 #Python
Python装饰器使用示例及实际应用例子
Mar 06 #Python
You might like
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
WebGame《逆转裁判》完整版 代码下载(1月24日更新)
2007/01/29 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
wxpython 学习笔记 第一天
2009/03/16 Python
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
python保存网页图片到本地的方法
2018/07/24 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python生成requirements.txt的两种方法
2019/09/18 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
什么是聚集索引和非聚集索引
2012/01/17 面试题
高中校园广播稿
2014/01/11 职场文书
《刷子李》教学反思
2016/02/20 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript