os 모듈 자주 쓰는거 정리

|

os 모듈은 script를 짤 때 많이 쓴다.

여태까지 써왔던 것을 정리하자.

함수들

search관련

Function Description Example
os.path.join(path, file) pathfile을 연결시켜준다. os.path.join('/folder','name') => '/folder/name'
os.path.splitext(name) name이름, 확장자로 분리시켜준다. os.path.splitext('/folder/name/a.html') => ('/folder/name/a', '.html')
os.listdir(path) path안의 폴더, 파일list로 만들어준다. os.listdir('.') => ['.DS_Store', '.git', ..., 'requirements.txt', 'testbed']

파일 조작 관련

Function Description Example
os.path.exists(path) path가 존재하는지 True, False로 나타낸다. os.path.exists('.') => True
os.makedirs(folder) folder를 만든다. os.makedirs(os.path.join('/home', 'testFolder))
os.rename(oldFile, newFile) rename함수. oldFilenewFile로 이동한다.(폴더 이동에도 쓰인다. os.rename('./test.txt', './temp/test.txt') : test.txt를 temp 안으로 이동

예제

import sys, os
import subprocess


def listExtFiles(path, extension):
    files = []
    for name in os.listdir(path):
        if os.path.isfile(os.path.join(path, name)):
            if name == ".DS_Store":
                continue
            filename, file_extension = os.path.splitext(name)
            if file_extension == extension:
                files.append(name)
    return files


def moveFiles(path, folder, fileList):
    if not os.path.exists(os.path.join(path, folder)):
        os.makedirs(os.path.join(path, folder))

    fileListWithPath = [os.path.join(path, file) for file in fileList]
    fileListWithNewPath = [os.path.join(path, os.path.join(folder, file)) for file in fileList]

    for oldFile, newFile in zip(fileListWithPath, fileListWithNewPath):
        print oldFile
        print newFile
        os.rename(oldFile, newFile)

def savePng(fileName, htmlName):
    try:
        check = subprocess.check_output(["webkit2png", "-F", "-z", "2", "--delay=0.5", "--filename="+fileName, htmlName], stderr=subprocess.STDOUT)
    except subprocess.CalledProcessError as e:
        string = "command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output)
        print string
    return 0

script, path = sys.argv

samsonFiles = listExtFiles(path, '.samson')
htmlFiles = listExtFiles(path, '.html')

pngFiles = [file[:-5] for file in htmlFiles]

for pngFile, htmlFile in zip(pngFiles, htmlFiles):
    html = os.path.join(path, htmlFile)
    png = os.path.join(path, pngFile)
    savePng(png, html)

pngFiles = listExtFiles(path, '.png')

moveFiles(path, "html", htmlFiles)
moveFiles(path, "png", pngFiles)
moveFiles(path, "samson", samsonFiles)