텍스트 파일을 반복문을 통해 가장 마지막 시뮬레이션 데이터 찾기

조회수 1001회

.txt 형식으로 저장한 시뮬레이션 데이터 파일을 불러들여 파이썬을 통해 가장 마지막으로 시뮬레이션 된 데이터를 찾아 추출을 해야하는데

f = open("/home/sjhyun960/바탕화면/4.txt", 'r') #텍스트 파일 불러와 읽기

textfile = f.read()

f.close()

파일을 읽어들인 후, 단순 문자열을 리스트 구조로 바꿔봤습니다.

TextList = textfile.splitlines() #리스트 구조로 변경

print("\n")

이 후에 find문과 반복문을 적절히 이용해서 아래의 텍스트 파일의 가장 마지막 데이터를 찾아야 하는데 여기서 막혔습니다.. 문자열을 통째로 읽어들이다 보니 데이터 하나하나를 뽑는 것도 문제네요.. 이용할 수 있는 기본 소스코드가 있을까요..??이미지

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 탭으로 분리된 tsv 파일일 것 같은데요. csv, tsv 파일은 어렵게 텍스트파일 읽어서 파싱하지 마시고,

    pandas read_csv 를 이용하세요.

    >>> import pandas as pd
    >>> from io import StringIO
    >>> t = '''10   3.3 2.2 7.7
    11  33e7    2.1e3   1.333e-33
    12  9.12e3  3.32e-11    1.111'''
    >>> df = pd.read_csv(StringIO(t), sep='\t', header=None)
    >>> df
        0            1             2             3
    0  10          3.3  2.200000e+00  7.700000e+00
    1  11  330000000.0  2.100000e+03  1.333000e-33
    2  12       9120.0  3.320000e-11  1.111000e+00
    >>> df.iloc[-1]
    0    1.200000e+01
    1    9.120000e+03
    2    3.320000e-11
    3    1.111000e+00
    Name: 2, dtype: float64
    >>> a, b, c, d = df.iloc[-1]
    >>> a
    12.0
    >>> b
    9120.0
    >>> c
    3.3200000000000006e-11
    >>> d
    1.111
    >>> 
    
    • 탭으로 분리된 텍스트파일(tsv)이라면, read_csvsep 인자를 탭문자로 주어서 읽으면 됩니다.
    • 읽은 내용은 테이블형태의 dataframe 이 됩니다. 데이터를 행, 열 별로 다루기 편합니다.
    • 질문한 마지막 데이터는 df.iloc[-1] 처럼 해서 읽은 데이터의 마지막 row 를 확인하면 됩니다.
    • 예제의 StringIO(t) 부분만 읽을 파일명으로 주면 됩니다. (텍스트파일의 모양에 따라 인자가 약간 달라질 수 있는데, 컬럼명이 있다면, header=None 이 없어야 합니다.)
  • namedtuple 를 이용해서 class에 매핑하세요.

    line = "1111 2222 3333 4444"
    
    from collections import namedtuple
    myclass = namedtuple('myclass', ['field1', 'field2', 'field3', 'field4'])
    
    myclass(*line.split())
    => myclass(field1='1111', field2='2222', field3='3333', field4='4444')
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)