폴더마다 같은 종류의 다른 사이즈의 아이콘들이 들어 있는데 이중 48X48 크기의 아이콘들 중 좀 쓸만한 것들을 뽑아서 다른 폴더에 모으려고 했는데, 양이 너무 많았다. 차라리 그 크기의 아이콘들만 모두 모아서 한 곳에 모아두고 보는 게 좋겠다 싶었다.
파이썬은 이럴때 쓰라고 있는 겁니다. 내가 쓰고자 하는 파일들은 모두~”48.png”로 끝나는 파일이라 이 파일들만 복사하면 된다. 특이하게 os 모듈이 아니라 shutil 모듈에 파일 복사 기능이 들어있더라.
#!c:/python27/python.exe
import os
import shutil
DESTDIR = "c:/temp/icons"
def check_condition(filename):
return filename.endswith("48.png")
def main():
w = os.walk(".")
for dir_ in w:
for file_ in dir_[2]:
if check_condition(file_):
shutil.copy(os.path.join(dir_[0], file_), DESTDIR)
if __name__ == "__main__":
main()
참고로 아래는 프로파일을 측정한 결과. 약 11500여개의 파일을 탐색하고 1600개 가량의 파일을 복사했다. 이걸 손으로 다 뒤질 생각을 했다니;;;;;
1646 files have been copied.
241158 function calls (234218 primitive calls) in 15.349 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 15.349 15.349 <string>:1(<module>)
1 0.027 0.027 15.349 15.349 copy_icons.py:11(main)
11584 0.010 0.000 0.020 0.000 copy_icons.py:8(check_condition)
23342 0.018 0.000 0.018 0.000 ntpath.py:122(splitdrive)
1646 0.015 0.000 0.017 0.000 ntpath.py:164(split)
1646 0.002 0.000 0.020 0.000 ntpath.py:196(basename)
1764 0.001 0.000 0.001 0.000 ntpath.py:210(islink)
3292 0.033 0.000 0.060 0.000 ntpath.py:398(normpath)
3292 0.004 0.000 0.007 0.000 ntpath.py:42(normcase)
3292 0.007 0.000 0.095 0.000 ntpath.py:466(abspath)
18404 0.029 0.000 0.042 0.000 ntpath.py:55(isabs)
18404 0.063 0.000 0.110 0.000 ntpath.py:63(join)
8706/1766 0.065 0.000 3.110 0.002 os.py:209(walk)
1646 0.038 0.000 12.185 0.007 shutil.py:111(copy)
1646 0.017 0.000 7.381 0.004 shutil.py:46(copyfileobj)
1646 0.010 0.000 0.123 0.000 shutil.py:54(_samefile)
1646 1.589 0.001 11.471 0.007 shutil.py:66(copyfile)
1646 0.018 0.000 0.439 0.000 shutil.py:86(copymode)
1646 0.003 0.000 0.003 0.000 stat.py:21(S_IMODE)
1693 0.002 0.000 0.002 0.000 stat.py:24(S_IFMT)
1693 0.003 0.000 0.005 0.000 stat.py:52(S_ISFIFO)
3292 0.013 0.000 0.013 0.000 {hasattr}
3292 0.005 0.000 0.005 0.000 {isinstance}
39803 0.008 0.000 0.008 0.000 {len}
13348 0.005 0.000 0.005 0.000 {method 'append' of 'list' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
11584 0.010 0.000 0.010 0.000 {method 'endswith' of 'str' objects}
1 0.000 0.000 0.000 0.000 {method 'format' of 'str' objects}
3292 0.002 0.000 0.002 0.000 {method 'join' of 'str' objects}
3292 0.002 0.000 0.002 0.000 {method 'lower' of 'str' objects}
3292 0.002 0.000 0.002 0.000 {method 'lstrip' of 'str' objects}
3292 7.349 0.002 7.349 0.002 {method 'read' of 'file' objects}
6584 0.005 0.000 0.005 0.000 {method 'replace' of 'str' objects}
3292 0.005 0.000 0.005 0.000 {method 'split' of 'str' objects}
6584 0.004 0.000 0.004 0.000 {method 'startswith' of 'str' objects}
1646 0.015 0.000 0.015 0.000 {method 'write' of 'file' objects}
3292 0.028 0.000 0.028 0.000 {nt._getfullpathname}
14994 0.643 0.000 0.643 0.000 {nt._isdir}
1646 0.317 0.000 0.317 0.000 {nt.chmod}
1765 2.509 0.001 2.509 0.001 {nt.listdir}
4938 0.260 0.000 0.260 0.000 {nt.stat}
3292 2.212 0.001 2.212 0.001 {open}