반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바
- 자바스크립트
- 문자열
- SpringBoot
- Java
- 정규식
- 배열
- HashMap
- CSS
- junit
- math
- java테스트
- 단위테스트
- 스프링부트
- 테스트자동화
- input
- Eclipse
- Visual Studio Code
- 인텔리제이
- Array
- list
- IntelliJ
- vscode
- ArrayList
- 자바문법
- js
- junit5
- html
- javascript
- string
Archives
- Today
- Total
어제 오늘 내일
[Python 실전] 여러 텍스트 파일을 하나의 딕셔너리로 병합하기 본문
여러 파일을 다룰 때는 1) 어떤 파일들을 읽을지 목록을 만들고, 2) 각 파일을 열어 데이터를 추출한 뒤, 3) 메인 딕셔너리에 추가하는 순서로 진행합니다.
1. 라이브러리로 파일 목록 한 번에 가져오기
glob 모듈을 사용하면 특정 폴더 안에 있는 모든 .txt 파일을 필터링해서 리스트로 가져올 수 있습니다.
📌 예제 코드: 폴더 내 모든 파일 취합
import glob
import os
# 1. 'data' 폴더 안의 모든 .txt 파일 경로를 가져옵니다.
file_list = glob.glob("data/*.txt")
all_data = {}
for file_path in file_list:
# 2. 파일 이름만 추출해서 딕셔너리의 키(Key)로 사용 (예: 'student1')
file_name = os.path.basename(file_path).replace(".txt", "")
with open(file_path, "r", encoding="utf-8") as f:
# 3. 파일 내용을 읽어 딕셔너리의 값(Value)으로 저장
# 여기서는 파일 전체 내용을 저장하거나, 줄별로 파싱할 수 있습니다.
all_data[file_name] = f.read().strip()
print(f"총 {len(all_data)}개의 파일을 합쳤습니다.")
2. 파일별 데이터를 '중첩 딕셔너리'로 합치기
단순히 내용 전체를 읽는 게 아니라, 각 파일 안에 들어있는 Key: Value 쌍들을 모아 하나의 큰 중첩 딕셔너리로 만드는 방식입니다.
📌 예제 코드: 상세 데이터 병합
import glob
# 예: 학생별 성적 파일들이 여러 개 있을 때
all_students_scores = {}
for file_path in glob.glob("scores/*.txt"):
student_name = os.path.basename(file_path).split(".")[0]
current_scores = {}
with open(file_path, "r", encoding="utf-8") as f:
for line in f:
if ":" in line:
subject, score = line.strip().split(":")
current_scores[subject.strip()] = int(score.strip())
# 학생 이름을 키로, 성적 딕셔너리를 값으로 저장
all_students_scores[student_name] = current_scores
# 결과: {'철수': {'국어': 90, '수학': 85}, '영희': {'국어': 95, '수학': 100}}
print(all_students_scores)
3. 중복된 키가 있을 때 안전하게 합치기 ()
여러 파일에 동일한 키(예: 동일 인물의 다른 날짜 기록)가 있을 때, 데이터가 덮어씌워지지 않고 리스트 형태로 쌓이게 하려면 defaultdict가 가장 좋습니다.
from collections import defaultdict
import glob
# 날짜별 판매 기록 파일을 합칠 때
total_sales = defaultdict(list)
for file_path in glob.glob("sales/*.txt"):
with open(file_path, "r", encoding="utf-8") as f:
for line in f:
item, amount = line.strip().split(",")
# 같은 품목이 나와도 리스트에 계속 추가됨
total_sales[item].append(int(amount))
# 결과: {'사과': [10, 5, 12], '포도': [3, 8]}
📝 핵심 요약
glob.glob("경로/*.txt"): 원하는 확장자 파일만 쏙쏙 골라 리스트로 만든다.os.path.basename(): 파일의 전체 경로에서 파일 이름만 추출할 때 유용하다.- 병합 전략: 파일 이름을 키로 쓸지, 파일 내부의 데이터를 누적할지에 따라 일반 딕셔너리 또는
defaultdict를 선택한다.
반응형
'IT > Python' 카테고리의 다른 글
| [Python 실전] 텍스트 파일을 읽어 딕셔너리로 변환하는 3가지 방법 (0) | 2026.06.13 |
|---|---|
| [Python 실전] 파이썬 딕셔너리를 TXT 파일로 저장하는 법 (0) | 2026.06.10 |
| [Python 실전] 파이썬 딕셔너리를 CSV 파일로 저장하는 법 (0) | 2026.06.08 |
| [Python 실전] 파이썬 딕셔너리를 파일로 저장하는 법: JSON 활용 가이드 (0) | 2026.06.08 |
| [Python 실전] 딕셔너리로 코드 속도 10배 올리기: 메모이제이션(Memoization) (0) | 2026.06.07 |
Comments