파이썬 정규표현식 - 파일 읽기, 저장
파일을 읽어서 특정 문자열을 찾고 텍스트 파일을 저장하는 프로그램을 작성합니다.
정규표현식을 사용하기 위하여 re
를 import 합니다.
파일 목록을 얻기 위하여 os
를 import 합니다.
import re
import os
찾을 문자열은 URL에서 사용하는 파라미터의 키와 값 입니다.
?
뒤에 오면서, &
로 구분되고, 키와 값은 =
으로 구분됩니다. 마지막에 ,
가 오는 문자열이라서 해당 내용을 추가하였습니다.
p = re.compile('([^&?]+)=([^&,]+)')
찾을 키 목록을 리스트로 생성합니다. 그리고 결과를 담을 리스트 변수를 생성합니다.
keys = ['fi', 'to', 'cb', 'do', 'fl', 'ho', 'si', 'te']
rst = []
for idx, item in enumerate(keys):
rst.append("")
os.listdir(경로)
를 통하여 특정 경로의 파일을 얻습니다. 파일을 저장할 경로도 설정합니다.
srcPath = os.getcwd() + "\\org\\"
destPath = os.getcwd() + "\\csv\\"
files = os.listdir(srcPath)
패턴의 p.findall(line)
을 사용하여 모든 내용을 검색하면서 반복처리 합니다. 해당 결과는 튜블로 전달되므로, 각각 tup[0], tup[1], ...
인덱스를 통하여 접근할 수 있습니다.
for tup in p.findall(line):
key = tup[0]
val = tup[1]
찾을 내용을 리스트로 생성하여 반복처리합니다. 리스트는 enumerate를 통하여 각각의 인덱스와 값을 얻을 수 있습니다.
for idx, item in enumerate(keys):
각각의 파일을 줄단위로 내용을 읽어서 원하는 문자열을 찾습니다. 리스트를 CSV 문자열로 변환하여 파일을 저장합니다.
for file in files:
fr = open(srcPath + file,'r')
fw = open(destPath + file + ".csv", 'w')
lines = fr.readlines()
# 줄단위
for line in lines:
# 검색단위
for tup in p.findall(line):
key = tup[0]
val = tup[1]
for idx, item in enumerate(keys):
if key == item:
rst[idx] = val
contents = ",".join(rst) + "\n"
print(contents, end="")
fw.write(contents)
fr.close()
fw.close()
전체 소스
import re
import os
p = re.compile('([^&?]+)=([^&,]+)')
srcPath = os.getcwd() + "\\org\\"
destPath = os.getcwd() + "\\csv\\"
files = os.listdir(srcPath)
keys = ['fi', 'to', 'cb', 'do', 'fl', 'ho', 'si', 'te']
rst = []
for idx, item in enumerate(keys):
rst.append("")
# 파일단위
for file in files:
fr = open(srcPath + file,'r')
fw = open(destPath + file + ".csv", 'w')
lines = fr.readlines()
# 줄단위
for line in lines:
for idx, item in enumerate(keys):
rst[idx] = ""
# 검색단위
for tup in p.findall(line):
key = tup[0]
val = tup[1]
for idx, item in enumerate(keys):
if key == item:
rst[idx] = val
contents = ",".join(rst) + "\n"
print(contents, end="")
fw.write(contents)
fr.close()
fw.close()
참고
'Programming > Python' 카테고리의 다른 글
[python] 알아보기 01 (0) | 2016.04.11 |
---|---|
[python] PyQt QString Unresolved reference (0) | 2016.03.09 |
Python 설치 (2) | 2016.03.03 |
[python] 체크 확인(Check the Check) - 정규표현식 (0) | 2015.11.01 |
[python] 인터프리터 (Interperter) - 나머지 연산 (0) | 2015.10.31 |
댓글