파이썬(Python)

[ Tkinter, Re ] 텍스트 파일(txt)을 불러와 공백 제거하기

카루루1007 2023. 3. 19. 22:16
728x90
반응형
SMALL

파이썬은 텍스트 처리에 유용한 다양한 기능을 제공하는 

인기 있는 프로그래밍 언어입니다. 

특히 정규 표현식(re) 모듈을 사용하면 

복잡한 문자열 패턴을 쉽게 찾고 바꿀 수 있습니다. 

이번 포스트에서는 파이썬과 정규 표현식을 사용하여 

텍스트 파일의 공백을 제거하는 방법에 대해 알아보겠습니다.

 

 

위와 같은 형태의 gui를 만들고 

버튼을 누르면 txt 파일을 선택할 수 있는 창이 뜨고

파일을 선택한 후 

공백제거가 완료되면 자동으로 저장할 수 있는 창이 생성이 되는 코드입니다.

 

사용할 모듈은 tkinterre 모듈입니다.

먼저 필요한 모듈을 모두 import 합니다.

import tkinter as tk
from tkinter import filedialog
import re

 

먼저 버튼을 하나 만들겠습니다.

import tkinter as tk
from tkinter import filedialog
import re

if __name__ == "__main__":
    root = tk.Tk()
    save_button = tk.Button(root, text="파일 열기 / 저장", command=save_file)
    save_button.pack(padx=5, pady=5)
    root.mainloop()

[ if __name__ == "__main__": ] 에 대한 설명은 여기를 참고하세요 

위 코드는

버튼을 하나 만들고, 버튼에 [ 파일 열기 / 저장 ]이라는 텍스트를 보여줍니다.

그리고 버튼을 클릭하면 [ save_file ]이라는 함수가 호출됩니다. 

 

위에서 버튼을 누르면 파일을 선택할 수 있는 창이 나타난다고 했습니다.

이제 파일을 선택할 수 있는 창이 나타나고

파일을 선택하면

공백을 제거하는 코드를 작성해 보겠습니다.

함수 이름은 [ open_file() ]로 하겠습니다.  

def open_file():
    file_path = filedialog.askopenfilename(filetypes=[("Text Files", "*.txt"),])
    if file_path:
        with open(file_path, "r", encoding="utf-8", errors='ignore') as file:
            file_content = file.read()
            file_content = re.sub(r'\s{2,}', ' ', file_content)
            return file_content, file_path.split(".")[-1]

 

먼저 askopenfilename() 메서드를 통해 파일타입이

txt 확장자인 파일을 열 수 있도록 합니다.

만약에 파일의 경로가 제대로 선택이 되었다면

파일을 열고 file_content에 해당 내용을 저장합니다.

with open(file_path, "r", encoding="utf-8", errors='ignore') as file:
      file_content = file.read()

 

그리고 난 후 다시 file_content를 읽어 들여 

공백을 제거를 한 후 다시 file_content에 저장합니다.

file_content = re.sub(r'\s{2,}', ' ', file_content)

 

그리고 파일의 내용[ file_content ]과 파일의 확장자[ file_path.split(".")[-1] ]을 반환합니다.

return file_content, file_path.split(".")[-1]

 

[ file_path.split(".")[-1] ] 이것을 조금 더 자세히 설명하면

file_path에는 파일의 경로가 들어 있습니다.

C:\Program Files\aaaa.txt

이런 경로가 있을 경우 [ . ]로 문자열을 나눕니다.

그 중 [ -1 ]번째 즉 나누어 진 것의 맨 마지막 것을 의미합니다.

맨 마지막 것이면 [ txt ]이며 확장자를 의미하게 됩니다.

반응형

이제 공백을 제거하겠다는 목적은 달성을 했습니다.

마지막으로 공백을 모두 제거한 파일을

저장하는 기능입니다.

def save_file():
    file_content, extension = open_file()
    if file_content and extension:
        file_path = filedialog.asksaveasfilename(defaultextension=extension, filetypes=[("Text Files", "*.txt"), ])
        if file_path:
            with open(file_path, "w", encoding="utf-8") as file:
                file.write(file_content)

save_file() 함수에서는 open_file() 함수를 호출합니다.

open_file() 함수를 호출하면, 공백을 제거하는 기능을 수행한 후

공백을 제거한 내용확장자를 반환합니다.

그것을 save_file() 함수에서 file_content, extension 변수에 각각 저장합니다.

이제 asksaveasfilename() 메서드를 통해 [ 다른이름으로 저장하기 ] 기능을 수행한 후

파일의 경로가 정상이라면

해당 내용을 파일에 써줍니다.

 

다음은 전체 소스코드입니다.

import tkinter as tk
from tkinter import filedialog
import re

def open_file():
    file_path = filedialog.askopenfilename(filetypes=[("Text Files", "*.txt"),])
    if file_path:
        with open(file_path, "r", encoding="utf-8", errors='ignore') as file:
            file_content = file.read()
            file_content = re.sub(r'\s{2,}', ' ', file_content)
            return file_content, file_path.split(".")[-1]

def save_file():
    file_content, extension = open_file()
    if file_content and extension:
        file_path = filedialog.asksaveasfilename(defaultextension=extension, filetypes=[("Text Files", "*.txt"), ])
        if file_path:
            with open(file_path, "w", encoding="utf-8") as file:
                file.write(file_content)

if __name__ == "__main__":
    root = tk.Tk()
    save_button = tk.Button(root, text="파일 열기 / 저장", command=save_file)
    save_button.pack(padx=5, pady=5)
    root.mainloop()

 

마지막으로 가장 오늘 블로그에서 가장 중요한 코드인

 file_content = re.sub(r'\s{2,}', ' ', file_content)

이 부분에 대해 조금 더 설명하겠습니다.

re 모듈의 sub() 메서드file_content 안에 있는 [ r'\s{2,}' ] 을 [ ' ' ]으로 바꾸어라 라는 의미입니다.

[ \s ]는 공백을 의미하는 정규표현식입니다.

공백은 스페이스가 될 수도 있고, 이 될 수도 있고, 줄바꿈이 될 수도 있습니다.

이것들이 [ {2, } ] 즉, 두번 이상 연속된다면, [ ' ' ]하나의 공백으로 바꾸라는 의미입니다.

정규표현식은 다음에 한번 다뤄볼 수 있도록 하겠습니다. 

 

※ with ~ as 가 궁금하시면 여기를 클릭하세요

 

[ Basic ] 파이썬 with 구문 : with ~ as

파일을 열거나 할 때 파일을 열고, 작업을 하고, 파일을 닫는 작업을 해주어야 합니다. 먼저 같단하게 텍스트 파일(txt)을 열고 [ HELLO ]라고 작성한 후 파일을 다시 닫는 코드를 살펴보겠습니다.

karuru1007.tistory.com

※ 파일 읽기 / 쓰기에 대한 간단한 설명입니다.

 

[ Basic ] 파이썬 파일 읽기, 쓰기[ open(), write() ]

파이썬에서 파일을 읽을 때 open() 함수를 사용합니다. open() 함수는 파이썬의 내장함수로 별도의 모듈을 설치하지 않아도 사용할 수 있습니다. 파일을 읽는데 사용한다고 표현하였지만, 파일을

karuru1007.tistory.com

※ tkinter 모듈의 파일 선택창 열기에 대한 블로그입니다.

 

[ Tkinter ] 파이썬에서 파일 선택창 열기(Python filedialog)

◆ tkinter 모듈 설치하기 pip install tk ◆ tkinter.filedialog 모듈 import from tkinter import filedialog ◆ filedialog 모듈 안의 askopenfilename() 함수 호출 filename = filedialog.askopenfilename() ◆ 전체코드 from tkinter import fil

karuru1007.tistory.com

 

728x90
반응형
LIST