파일 다루기
파일찾기
glob 모듈
import glob
files = glob.glob("*.exe")
print(files)
현재 디록토리 목록 얻기
import os
print(os.getcwd()) # cwd = 현재 작업 디렉토리
os.chdir("C:/WINDOWS")
print(os.getcwd())
print(os.listdir('.')) #cwd 목록을 얻는다.
os.walk 함수
>>> for t in os.walk('Root'):
... print t
...
('Root', ['D1', 'D2', 'D3'], ['FA.txt', 'FB.txt'])
('Root/D1', ['D1-1'], ['FC.txt'])
('Root/D1/D1-1', [], ['FF.txt'])
('Root/D2', [], ['FD.txt'])
('Root/D3', ['D3-1'], ['FE.txt'])
('Root/D3/D3-1', [], ['target.txt'])
>>>
정규표현식 사용하기
import os,re
def find_file(filepattern, base = '.'):
regex = re.compile(filepattern)
matches = []
for root, dirs, files in os.walk(base):
for f in files:
if regex.match(f):
matches.append(root + '/' + f)
return matches
파일 이동과 복사 그리고 삭제하기
shutil 모듈
copy(src, dst)
src 파일을 dst 파일이나 디렉토리에 복사한다. dst가 디렉토리이면, 지정된 디렉토리에 src와 바탕이름이 같은 파일이 생성된다(즉 오버라이트된다). 허가 비트도 복사된다. src와 dst는 문자열로 주어진 경로 이름이다.move(src, dst)
재귀적으로 파일이나 디렉토리를 다른 곳으로 이동시킨다.목적지가 현재 파일시스템이면, 그냥 src의 이름을 바꾸어라. 그렇지 않으면, src를 dst에 복사하고 src를 삭제하라.
좀 이상하지만, 다음 함수들은 shutil이 아니라 os 모듈에 있습니다:
remove(path)
파일 경로를 제거한다.path가 디렉토리이면, OSError가 일어난다; (디렉토리를 제거하려면 rmdir()을 사용하라).
rename(src, dst)
src 파일이나 디렉토리 dst로 이름을 바꾼다.dst가 디렉토리이면, OSError가 일어난다.
>>> import os
>>> import shutil as sh
>>> import glob as g
>>> os.chdir('Root')
>>> os.listdir('.')
['D1', 'D2', 'D3', 'FA.txt', 'FB.txt']
>>> sh.copy('FA.txt', 'CA.txt')
>>> os.listdir('.')
['CA.txt', 'D1', 'D2', 'D3', 'FA.txt', 'FB.txt']
>>> sh.move('FB.txt','CB.txt')
>>> os.listdir('.')
['CA.txt', 'CB.txt', 'D1', 'D2', 'D3', 'FA.txt']
>>> os.remove('FA.txt')
>>> os.listdir('.')
['CA.txt', 'CB.txt', 'D1', 'D2', 'D3']
>>> for f in g.glob('*.txt'):
... newname = f.replace('C','F')
... os.rename(f,newname)
...
>>> os.listdir('.')
['D1', 'D2', 'D3', 'FA.txt', 'FB.txt']
>>>
>>>
파일 속성
import os.path as p
import glob
for item in glob.glob('*')
if p.isfile(item):
print(item, ' is a file')
elif p.isdir(item):
print(item, ' is a directory')
else:
print(item, ' is of unknown type')
파일정보 상세 보기
os.stat()은 함수
- st_mode (보호 비트),
- st_ino (inode 번호),
- st_dev (장치),
- st_nlink (하드 링크 개수),
- st_uid (사용자 ID),
- st_gid (그룹 ID),
- st_size (바이트 단위의 파일 크기),
- st_atime (최근 접근 시간),
- st_mtime (최근 수정 시간),
- st_ctime (생성시간, 그러나 플랫폼에 의존한다)
파일의 허가권 바꾸는 법
>>> perm = '111101100' # rwxr--r--
>>> print(int(perm,2))
492
>>> os.chmod('FA.txt',492)
>>> os.chmod('FA.txt',int('111101100',2))
>>> # 앞에 0을 붙여서 8진수로 취급
>>> os.chmod('FA.txt',0754)
프로세스 조작하기
외부 프로그램 실행하기
os.system()
유닉스
>>> import os
>>> errorcode = os.system("clear")
0
MS DOS / Windows
>>> errorcode = os.system("CLS")
0
os.popen()
import os
psout = os.popen('ps -ef', 'r')
results = psout.read().split('\n')
for line in results:
print line
외부 프로그램 접근을 위한 다른 방법
command 모듈
>>> import commands as c
>>> psout = c.getoutput('ps -ef').split('\n')
>>> for row in psout:
... if 'python' in row:
... print row.split()[-5]
...
3268
>>>
사용자 환경
>>> import os
>>> print(os.environ)
>>> os.getenv('PYTHONPATH')