Pythonはフォルダを再帰的に巡回してファイルを削除することを実現します。
考え方:
フォルダの下を巡回
フォルダ名が「.svn」に等しい場合は、フォルダのプロパティを変更します。「.svn」のファイルは読み取り専用ですので、直接削除できません。
このフォルダを削除
フォルダ名が「.svn」に等しくない場合、上の方法に戻ります。
Pythonの実現
コード
Walkはosモジュールの下で、提供されたフォルダに基づいてgeneratorを生成するために使用されます。毎回一つの3元tuppleを得ることができます。最初はスタートパス、二つ目はスタートパス下のフォルダ、三つ目はスタートパス下のファイルです。
OS.system(''atrib-r'+parent+'''''*/')設定フォルダは書き込み可能です。
shutil.rmtree(parent+os.sep+dirname)フォルダを削除します。フォルダの中にファイルがあっても。
例二:
Pythonは、指定されたファイルディレクトリを再帰的に巡回することを実現し、指定されたファイルまたはディレクトリ名と同じファイルまたはディレクトリのすべての絶対パスを見つける。
scandir.py:
1.関数scandirのモダリティは、カタログ名でもファイル名でもよい。
2.関数chdirの役割は、指定されたディレクトリに切り替えることであり、このパラメータは有効であり、アクセス権限がある相対パスまたは絶対パスでなければならない。
3.関数の5行目は、getcwd関数を使用しても、現在の絶対パスを取得するためです。
4.文字列のコネクタとして丸を付けます。OS上では、GNU/LinuxとUNIX上での戻り値は'/'であり、windows上での戻り値は'\'であり、Mac OS上では':'であり、OS上では直接文字を使わずにOSを使ってプログラムの移植性を高めています。
5.再帰的に呼び出した後は、必ずOS.chdirを忘れて上のディレクトリ(つまり父のディレクトリ)に戻ります。
重要:
1.forの中の二つが並んでいるif文を理解し、並べて目的がフォルダであることを解決するために、そのターゲットフォルダには要求に合致するフォルダが含まれています。
2.指定されたディレクトリにアクセス制限のファイルまたはフォルダが存在すると、プログラムは失敗し、アクセス権のない情報を返す。
例三:
Pythonはフォルダを再帰的に巡回して、ある文字列を含むテキストファイルを探しています。
linuxでは、eclipseを使わないと、どのようなファイルに文字列が現れているかを調べたいです。自分でこのスクリプトを書きましたが、エンコード時に使いやすいです。テキストファイルに含まれている場合は、最初の行数だけを記録して出力します。
使用方法:
python xx.pyパス文字列
python search_content.py/home/www/abcdefg
search_content.py
フォルダの下を巡回
フォルダ名が「.svn」に等しい場合は、フォルダのプロパティを変更します。「.svn」のファイルは読み取り専用ですので、直接削除できません。
このフォルダを削除
フォルダ名が「.svn」に等しくない場合、上の方法に戻ります。
Pythonの実現
コード
import os
import shutil
import os.path
import stat
rootdir="F:\\work\\Test"
for parent,dirnames,filenames in os.walk(rootdir): #
for dirname in dirnames:
if dirname=='.svn':
strfilepath=parent+os.sep+dirname
if os.path.isdir(strfilepath):
os.system('attrib -r ' + parent + '\\*.* /s')#
os.system('attrib -r ' + strfilepath + '\\*.* /s')#
shutil.rmtree(parent+os.sep+dirname)#
ポイント:Walkはosモジュールの下で、提供されたフォルダに基づいてgeneratorを生成するために使用されます。毎回一つの3元tuppleを得ることができます。最初はスタートパス、二つ目はスタートパス下のフォルダ、三つ目はスタートパス下のファイルです。
OS.system(''atrib-r'+parent+'''''*/')設定フォルダは書き込み可能です。
shutil.rmtree(parent+os.sep+dirname)フォルダを削除します。フォルダの中にファイルがあっても。
例二:
Pythonは、指定されたファイルディレクトリを再帰的に巡回することを実現し、指定されたファイルまたはディレクトリ名と同じファイルまたはディレクトリのすべての絶対パスを見つける。
scandir.py:
#! /usr/bin/python
# filename : scandir.py
# author : Jesse
# update : 2011/08/15 10:16
import os
def scandir(startdir, target) :
os.chdir(startdir)
for obj in os.listdir(os.curdir) :
if obj == target :
print os.getcwd() + os.sep + obj
if os.path.isdir(obj) :
scandir(obj, target)
os.chdir(os.pardir) #!!!
startdir = raw_input('Please input startdir: ')
target = raw_input('Please input target: ')
scandir(startdir, target)
このプログラムについて説明します。1.関数scandirのモダリティは、カタログ名でもファイル名でもよい。
2.関数chdirの役割は、指定されたディレクトリに切り替えることであり、このパラメータは有効であり、アクセス権限がある相対パスまたは絶対パスでなければならない。
3.関数の5行目は、getcwd関数を使用しても、現在の絶対パスを取得するためです。
4.文字列のコネクタとして丸を付けます。OS上では、GNU/LinuxとUNIX上での戻り値は'/'であり、windows上での戻り値は'\'であり、Mac OS上では':'であり、OS上では直接文字を使わずにOSを使ってプログラムの移植性を高めています。
5.再帰的に呼び出した後は、必ずOS.chdirを忘れて上のディレクトリ(つまり父のディレクトリ)に戻ります。
重要:
1.forの中の二つが並んでいるif文を理解し、並べて目的がフォルダであることを解決するために、そのターゲットフォルダには要求に合致するフォルダが含まれています。
2.指定されたディレクトリにアクセス制限のファイルまたはフォルダが存在すると、プログラムは失敗し、アクセス権のない情報を返す。
例三:
Pythonはフォルダを再帰的に巡回して、ある文字列を含むテキストファイルを探しています。
linuxでは、eclipseを使わないと、どのようなファイルに文字列が現れているかを調べたいです。自分でこのスクリプトを書きましたが、エンコード時に使いやすいです。テキストファイルに含まれている場合は、最初の行数だけを記録して出力します。
使用方法:
python xx.pyパス文字列
python search_content.py/home/www/abcdefg
search_content.py
#!/use/bin/env python
#-*- coding:utf-8 -*-
import sys,os
filterType = ['gif','png','bmp','jpg','jpeg','rar','zip',
'ico','apk','ipa','doc','docx','xls','jar',
'xlsx','ppt','pptx','pdf','gz','pyc','class']
num = 0
def search(path=None,cont=None):
if not path or not cont:
print('path or searchString is empty')
return
global num
_loopFolder(path,cont)
print("%s file find" % num)
def _loopFolder(path,cont):
arr = path.split('/')
if not arr[-1].startswith('.'): #
if os.path.isdir(path):
folderList = os.listdir(path)
for x in folderList:
_loopFolder(path+"/"+x,cont)
elif os.path.isfile(path):
_verifyContent(path,cont)
def _verifyContent(path,cont):
if path.split('.')[-1].lower() in filterType:
return
global num
fh = open(path,'r')
fhContent = fh.readlines()
fh.close()
for index,x in enumerate(fhContent):
if cont in x:
num += 1
print("%s %s" % (path,index+1))
break
return
if __name__ == "__main__":
if len(sys.argv) < 3:
print("invalid parameters")
else:
search(sys.argv[1],sys.argv[2])