파일 다루기

파일찾기

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')

results matching ""

    No results matching ""