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 获取进程pid号的方法
Mar 10 Python
理解python多线程(python多线程简明教程)
Jun 09 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Django内容增加富文本功能的实例
Oct 17 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
python实现学生管理系统
Jan 11 Python
pygame实现飞机大战
Mar 11 Python
Python字典实现伪切片功能
Oct 28 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
python爬虫之利用selenium模块自动登录CSDN
Apr 22 Python
Python使用scapy模块发包收包
May 07 Python
pandas中关于apply+lambda的应用
Feb 28 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 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
python框架中flask知识点总结
2018/08/17 Python
vue+django实现下载文件的示例
2021/03/24 Vue.js
超市实习总结自我鉴定
2013/09/19 职场文书
化工见习报告范文
2014/10/31 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android
Go gorilla/sessions库安装使用
2022/08/14 Golang