欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python復(fù)制目錄結(jié)構(gòu)腳本代碼分享

 更新時(shí)間:2015年03月06日 11:33:57   投稿:junjie  
這篇文章主要介紹了Python復(fù)制目錄結(jié)構(gòu)腳本代碼分享,本文分析了需求、講解了匿名函數(shù)lambda等內(nèi)容,并給出了腳本代碼,需要的朋友可以參考下

引言

  有個(gè)需要,需要把某個(gè)目錄下的目錄結(jié)構(gòu)進(jìn)行復(fù)制,不要文件,當(dāng)目錄結(jié)構(gòu)很少的時(shí)候可以手工去建立,當(dāng)目錄結(jié)構(gòu)復(fù)雜,目錄層次很深,目錄很多的時(shí)候,這個(gè)時(shí)候要是還是手動(dòng)去建立的話,實(shí)在不是一種好的方法,弄不好會(huì)死人的。寫一個(gè)python腳本來處理吧。

首先了解

  寫python腳本前,先了解幾個(gè)東西

復(fù)制代碼 代碼如下:

#!/usr/bin/python

這個(gè)東西寫過腳本的人都知道,用來標(biāo)明該腳本的執(zhí)行器,類似的還有
復(fù)制代碼 代碼如下:

#!/bin/bash       通過bash來執(zhí)行
#!/usr/local/php/bin/php 通過php執(zhí)行器來執(zhí)行   
 

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


這個(gè)是設(shè)置腳本的編碼格式,不然非英文可能會(huì)出現(xiàn)亂碼

匿名函數(shù)lambda

復(fù)制代碼 代碼如下:

#lambda很好用,創(chuàng)建匿名函數(shù)很方便
g = lambda x,y : x+y
g(3,5) #返回8

匿名函數(shù)分為四部分,標(biāo)識(shí) lambda,分號(hào) :,參數(shù) x,y,操作 x+y

除了這個(gè)之外,還有函數(shù)map、filter一個(gè)進(jìn)行映射,一個(gè)進(jìn)行過濾

復(fù)制代碼 代碼如下:

__name__=="__main__"

一個(gè)文件就是一個(gè)模塊,在python中每個(gè)模塊都有一個(gè)__name__屬性,屬性的值取決于如何使用該模塊,一般有兩種使用方式,直接在命令行運(yùn)行,這個(gè)時(shí)候__name__值為__main__,當(dāng)import使用的時(shí)候,__name__值就是當(dāng)前模塊的名稱(不帶擴(kuò)展名),因此可以通過這個(gè)判斷是否是直接在命令行運(yùn)行程序,以便做一些腳本使用。
復(fù)制代碼 代碼如下:

import os
import sys

還有這兩個(gè)模塊,os包含一些操作系統(tǒng)功能,比如說遍歷文件夾,拼接路徑等等,sys模塊包含系統(tǒng)函數(shù),我這里只用來獲取腳本后面的參數(shù)

編碼

復(fù)制代碼 代碼如下:

#!/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("源文件夾不存在")

使用

  使用很簡單:

復(fù)制代碼 代碼如下:

#在當(dāng)前文件夾下執(zhí)行
./folders.py ./ /tmp/yyyyy

#執(zhí)行完之后就會(huì)在/tmp下創(chuàng)建yyyyy目錄,目錄中包含上面的第一個(gè)文件夾中的目錄結(jié)構(gòu)

這個(gè)地方有兩個(gè)要注意的地方,不能將創(chuàng)建后的目錄放在要復(fù)制的目錄中或者其子目錄中

總結(jié)

  在做這個(gè)的時(shí)候遇到了這個(gè)問題 /usr/bin/python^M: bad interpreter: No such file or directory ,這個(gè)問題看樣子是編碼的問題,在每行后面添加了個(gè)字符,查資料后,原來是由于我從windows下直接把程序復(fù)制到linux下的編碼出現(xiàn)了問題,解決方法很簡單:vi folders.py之后,在命令行下輸入

復(fù)制代碼 代碼如下:

:set ff #結(jié)果表示編碼平臺(tái),應(yīng)該是fileformat=dos

:set fileformat=unix #設(shè)置編碼到unix平臺(tái)

:set ff #這個(gè)時(shí)候再去查看文件編碼,應(yīng)該是fileformat=unix

相關(guān)文章

最新評(píng)論