- 정규표현식
문서나 웹 사이트에서 특정 단어를 검색할 때 대부분 사용하는 Ctrl+F가 정규 표현식에 근거하여 만들어진 기능이라는 것을 lms 노드를 공부하면서 알게 되었다.
문자열에서 특정 문자를 원하는 문자로 변경할 때는 파이썬에서 .replace()를 사용하면 된다.
이는 정규 표현식을 이용하여 할 수도 있다.
import re
>>> text = 'I My Me Mine'
>>> text_pattern = re.sub("I", "You", text) #re.compile()로 Regex 객체를 만든다.
>>> print(text_pattern)
You My Me Mine
정규 표현식은 특정 문자열 패턴을 정의하고 기존 문자열과 비교하여 일치하는지 확인하는 작업이다.
import re
>>> text = "E-mail adresses are iambeginnerdeveloper@tistory.com, and lms@aiffel.com"
>>> pattern = re.compile("[0-9a-zA-Z]+@[0-9a-zA-Z]+\.[0-9a-zA-Z]+") #re.compile()로 Regex 객체를 만든다.
>>> pattern.findall(text) #특정 문자열을 검색한다.
['iambeginnerdeveloper@tistory.com', 'lms@aiffel.com']
패턴 객체를 활용한 메소드는 search(), match(), findall(), split(0, sub(), group() 등이 있다.
search()는 일치하는 패턴이 있으면 MatchObject를 반환한다.
match()는 패턴이 처음부터 일치해야만 한다.
findall()은 일치하는 패턴을 찾아 리스트에 담아서 반환한다.
split()은 패턴으로 나누는 것이며 sub()는 일치하는 패턴으로 변경해주는 것이다.
group()은 실제 아웃풋에 해당하는 문자열을 반환한다.
- CSV 파일 (Comma Seperated Value)
쉼표로 구분된 파일을 csv 파일이라고 한다. 각 칼럼(column)을 ,(쉼표)로 구분하는 것이다.
파이썬의 pandas는 DataFrame이라는 to_csv 메소드를 지원한다. 이를 이용하면 csv 파일로 쉽게 저장을 할 수 있다.
반대로 csv 파일을 pandas DataFrame으로 변환시키면 사용자가 편집하기 용이하게 바뀐다.
#csv 파일 생성
directory = {
1 : ["/home/hjryu", "spectrum.fits"]
2 : ["/home/hjryu", "positon.txt"]
}
with open("directory.csv", "w") as f :
for i in directory.values() :
data = ','join(i)
f.write(data+"\n")
#판다스 사용해서 csv 파일로 저장하기
import pandas as pd
df = pd.DataFrame9rows, coulumns = header) #여기서 header는 데이터의 헤더명임. (헤더가 있는 파일일 때 사용)
df.to_csv('pandas.csv', index = False)
- XML 파일 (Extensible Markup Language)
XML 파일의 존재를 인턴을 하면서 알게 되었다.
XML의 정확한 개념을 몰라 어떤 구조로 되어있는진 모르지만.. 적어도 나는 XML파일을 사용하여 프로그램을 만들 때 굉장히 편했다.
XML 파일을 알기 전에는 파일의 디렉토리를 코드 내에 하드코딩하는 방법으로 코드를 작성했었다. 이런 하드코딩의 문제는 후에 디렉토리가 변경됐을 때 코드를 다시 열어 수정해야 한다는 번거로움이 있다는 것이다.
XML 파일을 사용법을 배우게 된 후로는 파일의 디렉토리를 하드코딩하지 않아도 되었고 언제든지 xml 파일 내의 디렉토리 부분만 수정하여 코드를 건들이지 않고도 프로그램을 실행할 수 있었다.
아래는 파이썬으로 XML파일을 만드는 방법이다.
파이썬에서는 xml을 표준 라이브러리로 지원하고 있다. 따라서 import를 하여 xml 파일을 생성할 수 있다.
Element()로 root tag를 만들어 SubElement()로 하위 tag를 추가하는 방법으로 xml 파일을 작성하면 된다.
ElementTree()는 작성한 내용을 xml 파일로 저장할 때 사용한다.
-JSON 파일 (JavaScript Object Notation)
JSON은 웹 브라우저와 다른 어플리케이션 간 HTTP 요청으로 데이터를 보내야할 때 사용하는 표준 파일 포맷이다.
JSON 파일 역시 인턴을 하면서 알게 되었는데 JSON 파일을 알기 전에는 파이썬의 configparser 를 import 하여 config.ini 파일을 만들어서 위의 XML 파일처럼 사용했다.
.ini 파일 말고도 json을 import하여 사용할 수 있다는 것을 안 후로는 종종 JSON 파일로 생성하여 사용하기도 했다.
lms 노드에선 config parser에 대해 언급은 하지 않았지만 작성법이 그리 큰 차이가 나지 않기 때문에 두가지를 함께 코드로 남긴다.
#config.ini 파일 생성
import configparser
config = configparser.ConfigParser()
config['directory'] = {}
config['directory']['file_dir'] = '/home/hjryu/'
config['directory']['save-dir'] = '/home/hjryu/'
with open('config.ini', 'w' encoding = 'utf-8') as configfile :
config.write(configfile)
#config.ini 코드 내에서 사용하기
import configparser
config = configparser.ConfigParser()
config.read('config.ini', encoding = 'utf-8')
file_dir = config['directory']['file_path']
save_dir = config['directory']['save_path']
#directory.json 파일 생성
directory = {
"file_dir" : "/home/hjryu/"
"save_dir" : "/home/hjryu/"
}
with open("directory.json", 'w') as f :
json.dump(directory, f)
#JSON 파일 코드 내에서 사용할 때
import json
with open("directory.json", "r", encoding = "utf-8") as f :
json_file = json.load(f)
print(json_file["file_dir"])
print(json_file["save_dir"])
이 두가지 모두 빌트인 데이터 구조를 사용하여 설정값을 관리할 수 있으며 내가 사용했던 (위의 코드들) 방법인 외부 파일에 저장된 설정 값들을 로드하여 사용하는 방법이 있다.
configpaser나 JSON을 사용하는 것 보다 XML 사용하는 것을 권장했었는데 이유는 잘 모르겠다... 3가지 모두 리눅스 텍스트 편집기로 읽기, 쓰기 모두 가능했는데 차이점이 무엇인진 모르겠다.. 그것까지 알고 그만뒀으면 지금쯤 속 시원했을텐데.. 아쉽다.