Python/NumPy

NumPy 텍스트 파일 읽기 및 쓰기 (loadtxt, savetxt)

임베디드 친구 2025. 10. 20. 21:01
반응형

NumPy 텍스트 파일 읽기 및 쓰기 (loadtxt, savetxt)

데이터 분석과 처리를 하다 보면 데이터를 파일로 저장하거나, 파일에서 데이터를 읽어와야 할 때가 많습니다. 특히 텍스트 파일 형식은 다양한 환경에서 호환성이 뛰어나 많이 사용됩니다. NumPy는 이러한 작업을 간단하게 처리할 수 있도록 loadtxtsavetxt라는 함수를 제공합니다. 이번 포스팅에서는 이 두 함수의 사용법과 실전 예제를 통해 텍스트 파일 입출력 작업을 효율적으로 수행하는 방법을 알아보겠습니다.


1. NumPy loadtxtsavetxt란?

numpy.loadtxt

loadtxt 함수는 텍스트 파일에서 데이터를 읽어 NumPy 배열로 변환합니다. 파일에 저장된 숫자 데이터를 쉽고 빠르게 로드할 수 있어 데이터 분석 초기 작업에 자주 활용됩니다.

  • 주요 파라미터:
    • fname: 읽어올 파일의 이름 또는 경로
    • dtype: 데이터 타입 (기본값: float)
    • delimiter: 구분자 (기본값: 공백)
    • skiprows: 무시할 행 수 (기본값: 0)
    • usecols: 읽어올 열의 인덱스 (기본값: 모든 열)

numpy.savetxt

savetxt 함수는 NumPy 배열 데이터를 텍스트 파일로 저장합니다. 간단한 설정만으로 데이터 출력을 자동화할 수 있습니다.

  • 주요 파라미터:
    • fname: 저장할 파일의 이름 또는 경로
    • X: 저장할 NumPy 배열
    • fmt: 저장할 데이터 형식 (기본값: %.18e)
    • delimiter: 구분자 (기본값: 공백)

2. loadtxt 사용 예제

기본적인 텍스트 파일 읽기

먼저, 간단한 예제 파일을 만들어보겠습니다:

1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0

위 파일을 "data.txt"로 저장했다고 가정합니다. 이 파일을 읽는 코드는 다음과 같습니다:

import numpy as np

# 텍스트 파일에서 데이터 로드
data = np.loadtxt('data.txt')
print(data)

출력 결과:

[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]

구분자가 있는 파일 읽기

다음은 쉼표(,)로 구분된 파일 예제입니다:

1.0,2.0,3.0
4.0,5.0,6.0
7.0,8.0,9.0

이를 읽으려면 delimiter 파라미터를 설정해야 합니다:

# 쉼표로 구분된 파일 읽기
data = np.loadtxt('data_comma.txt', delimiter=',')
print(data)

출력 결과는 동일합니다.

특정 열만 읽기

파일에서 첫 번째와 세 번째 열만 읽고 싶다면:

# 특정 열 읽기
data = np.loadtxt('data.txt', usecols=(0, 2))
print(data)

출력 결과:

[[1. 3.]
 [4. 6.]
 [7. 9.]]

문자열이 포함된 파일 읽기

loadtxt는 숫자 데이터를 처리하는 데 최적화되어 있습니다. 만약 파일에 문자열이 포함되어 있다면, genfromtxt를 사용하는 것이 더 적합합니다. 예를 들어:

# 문자열이 포함된 파일 예제
a,1,2,3
b,4,5,6
c,7,8,9
# 문자열 처리 예제
structured_data = np.genfromtxt('data_with_strings.txt', delimiter=',', dtype=None, encoding='utf-8')
print(structured_data)

3. savetxt 사용 예제

기본적인 텍스트 파일 저장

NumPy 배열을 생성한 뒤 텍스트 파일로 저장해보겠습니다:

# NumPy 배열 생성
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 텍스트 파일로 저장
np.savetxt('output.txt', array)

결과 파일 output.txt:

1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00

형식 지정하여 저장하기

데이터 형식을 지정하려면 fmt를 설정합니다:

# 형식 지정하여 저장
np.savetxt('output_formatted.txt', array, fmt='%.2f', delimiter=',')

결과 파일:

1.00,2.00,3.00
4.00,5.00,6.00
7.00,8.00,9.00

4. 실전 응용 예제

데이터 전처리 후 저장

파일에서 데이터를 읽고 일부만 저장하는 예제입니다:

# 데이터 로드
data = np.loadtxt('data.txt')

# 첫 번째 열과 두 번째 열의 합 계산
sum_column = data[:, 0] + data[:, 1]

# 새로운 배열 생성
new_data = np.column_stack((data, sum_column))

# 결과 저장
np.savetxt('processed_data.txt', new_data, fmt='%.2f', delimiter=',')

결과 파일 processed_data.txt:

1.00,2.00,3.00,3.00
4.00,5.00,6.00,9.00
7.00,8.00,9.00,15.00

5. 주의사항

  • 파일을 읽거나 쓸 때 경로가 올바른지 확인하세요.
  • savetxt는 1차원 또는 2차원 배열만 저장할 수 있습니다. 다차원 배열을 저장하려면 다른 방법을 사용하세요.
  • 큰 데이터셋을 처리할 때는 메모리 사용량을 주의하세요.

6. 결론

loadtxtsavetxt는 간단한 텍스트 파일 입출력을 처리할 때 매우 유용합니다. 이 두 함수만 잘 활용해도 데이터 전처리와 분석 작업에서 큰 효율성을 얻을 수 있습니다. 실전 프로젝트에서도 활용하며 익숙해지시길 바랍니다!

반응형