프로그램에서 다루는 데이터를 파일에 저장해 두면 언제든 다시 불러와 사용할 수 있습니다. 매번 데이터를 새로 생성할 필요 없이 파일에서 읽어오기만 하면 되기 때문에 작업 효율이 크게 향상됩니다.
파일을 읽을 때는 readlines() 메서드를 사용하고, 읽어온 내용을 리스트로 만들 때는 split() 메서드를 활용합니다.
이 글에서는 split() 메서드를 사용해 텍스트 파일의 내용을 리스트로 읽어오는 방법을 실제 예제와 함께 단계별로 살펴보겠습니다.
Python으로 텍스트 파일을 리스트로 읽기
먼저 grilled_cheese.txt라는 텍스트 파일을 준비했습니다. 이 파일에는 그릴 치즈 샌드위치를 만들 때 필요한 재료 목록이 담겨 있으며, 내용은 다음과 같습니다.
2 tbsp, ricotta 1 tbsp, grated parmesan 50g, mozzarella 25g, gorgonzola 2, thick slices white bread 1 tbsp, butter
파일의 첫 번째 열에는 각 재료의 사용량이, 두 번째 열에는 재료 이름이 기록되어 있습니다.
이제 open() 함수와 readlines() 메서드를 사용해 이 파일을 코드로 읽어보겠습니다.
with open("grilled_cheese.txt", "r") as grilled_cheese:
lines = grilled_cheese.readlines()
print(lines)
코드를 살펴보면, open() 문에서 "r" 문자로 읽기 모드(read mode)를 지정하여 "grilled_cheese.txt" 파일을 열었습니다. 그다음 readlines()로 파일의 모든 줄을 읽어온 뒤 콘솔에 출력합니다.
실행 결과는 다음과 같습니다.
['2 tbsp, ricotta\n', '1 tbsp, grated parmesan\n', '50g, mozzarella\n', '25g, gorgonzola\n', '2, thick slices white bread\n', '1 tbsp, butter\n']
파일의 각 줄이 리스트 형태로 반환되었습니다. 하지만 아직 원하는 결과는 아닙니다. 각 줄이 하나의 문자열로 통째로 저장되어 있어서 재료 이름과 사용량이 분리되지 않은 상태입니다.
split()으로 값을 나눠 리스트 만들기
이 문제를 해결하려면 split() 메서드를 사용합니다. 이 메서드는 지정한 구분자를 기준으로 문자열을 나눌 수 있습니다.
먼저 quantities(사용량)와 ingredients(재료)라는 두 개의 빈 리스트를 선언합니다. 이 코드는 open() 블록 안에 속하므로 들여쓰기를 유지해야 합니다.
quantities = [] ingredients = []
다음으로 for 반복문을 사용해 파일에서 읽어온 각 줄에 접근하고, 쉼표와 공백(", ")을 기준으로 각 줄을 두 부분으로 나눕니다.
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1])
for 반복문 덕분에 파일을 한 줄씩 처리할 수 있습니다. as_list의 첫 번째 값(as_list[0])은 재료의 사용량이고, 두 번째 값(as_list[1])은 재료 이름입니다. 이제 두 리스트를 콘솔에 출력해 보겠습니다.
print(quantities) print(ingredients)
코드를 실행하면 다음과 같은 결과가 나옵니다.
['2 tbsp, ricotta\n', '1 tbsp, grated parmesan\n', '50g, mozzarella\n', '25g, gorgonzola\n', '2, thick slices white bread\n', '1 tbsp, butter\n'] ['2 tbsp', '1 tbsp', '50g', '25g', '2', '1 tbsp'] ['ricotta\n', 'grated parmesan\n', 'mozzarella\n', 'gorgonzola\n', 'thick slices white bread\n', 'butter\n']
세 개의 리스트가 출력되었습니다. 첫 번째는 파일의 전체 텍스트 줄 목록, 두 번째는 재료 사용량 목록, 세 번째는 재료 이름 목록입니다.
줄바꿈 문자(\n) 제거하기
아직 한 가지 더 개선할 부분이 남아 있습니다. 모든 재료 이름 끝에 줄바꿈을 의미하는 "\n" 문자가 붙어 있는 것을 확인할 수 있습니다. 이 문자는 replace() 메서드로 제거할 수 있습니다.
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1].replace("\n", ""))
for 반복문 안에서 as_list[1], 즉 재료 이름에 해당하는 값의 "\n"을 빈 문자열로 교체했습니다.
이 변경 사항을 반영한 최종 코드는 다음과 같습니다.
with open("grilled_cheese.txt", "r") as grilled_cheese:
lines = grilled_cheese.readlines()
quantities = []
ingredients = []
for l in lines:
as_list = l.split(", ")
quantities.append(as_list[0])
ingredients.append(as_list[1].replace("\n", ""))
print(quantities)
print(ingredients)
실행 결과를 확인해 보겠습니다.
['2 tbsp', '1 tbsp', '50g', '25g', '2', '1 tbsp'] ['ricotta', 'grated parmesan', 'mozzarella', 'gorgonzola', 'thick slices white bread', 'butter']
코드가 성공적으로 텍스트 파일을 두 개의 리스트로 변환했습니다. 하나는 레시피에 필요한 재료 사용량 목록이고, 다른 하나는 사용할 재료 이름 목록입니다.
마무리
open()과 readlines() 메서드를 사용하면 텍스트 파일을 손쉽게 읽을 수 있으며, split() 메서드를 활용하면 특정 구분자를 기준으로 문자열을 나눠 리스트로 만들 수 있습니다.
위 예제에서는 쉼표와 공백(", ")의 위치를 기준으로 문자열을 리스트로 분리했습니다. 이제 여러분도 Python에서 텍스트 파일을 리스트로 읽어오는 작업을 전문가처럼 처리할 수 있을 것입니다.