본문 바로가기
Python

파이썬 Readlines, csv 파일 원하는 특정 행, 열 데이터 반환 (Python)

by 무적물리 2020. 4. 12.

여러 csv 파일을 다루어본 분이라면 아시겠지만 csv 파일을 열고 원하는 값을 엑셀로 옮기기가 여간 귀찮은 작업이 아닙니다. 저 또한 시뮬레이션을 진행하면서 쌓이는 몇 백개의 csv 데이터 때문에 원하는 행, 열에 해당하는 데이터를 반환받는 코드를 작성하였습니다. 특정 행, 열의 변호만 입력하면 해당 위치의 데이터를 가져올 수 있습니다. 오늘 포스팅에서는 해당 코드를 공유하겠습니다. 전체 코드는 포스팅 제일 하단에 위치하니, 참고하시기 바랍니다.




패키지 선언

특정 행, 열의 변호만 입력하면 해당 위치의 데이터를 가져올 수 있도록 코드를 작성하기 위해서는 기본적으로 파이썬에서 제공하는 readlines 함수와 더불어 데이터를 데이터프레임으로 만들어 줄 Pandas 패키지가 필요합니다. Pandas 패키를 간단하게 사용할 수 있도록 pd로 정의하겠습니다.


# 패키지 선언

import pandas as pd


타겟 행, 열 선언

csv를 엑셀로 열어보시면 가져오길 원한는 데이터의 행, 열 번호를 확인하실 수 있습니다. 시작행의 번호는 0이며, 시작열의 기준도 0입니다. 아래 그림을 예시로 보겠습니다. 데이터1은 엑셀기준으로 8행 D열에 있는데 행, 열번호는 (3, 7) 입니다. 데이터2도 같은 논리로 (8, 9) 입니다.



위와 같이 엑셀로 데이터의 행, 열번호를 확인 가능합니다. 물론, 다른 방법으로도 데이터의 행, 열 번호를 확인할 수 있으니, 가장 편한 방법을 사용하면 됩니다. 위 데이터 중 (3, 7)에 해당 하는 데이터를 가져오는 코드를 작성해보겠습니다.


# 원하는 행, 열 번호 선언

Target_Row = 3

Target_Column = 7


파일 경로, 이름 선언

원활한 코드의 작성을 위해 먼저 파일 경로와 이름을 선언하겠습니다. 이렇게 해주는 이유는 나중에 파일에 번호를 매기고 for문을 붙여서 다수의 파일의 데이터를 처리하기 위함 입니다.


# 파일 경로 및 이름 선언

Directory = "D:/WorkHard"

File_Name = "S"



Main 코드 작성

먼저, 파일을 열고 파일 안의 csv형 데이터를 lines 변수에 담아보겠습니다. 이후에 lines에 리스트로 저장된 데이터의 원하는 행에 해당하는 리스트 값을 콤마로 분리하고, 분리된 데이터에서 원하는 열에 해당하는 데이터를 반환받는 코드입니다.


# File Open, Data 저장 to lines

f_read = open('{}/{}.csv'.format(Directory, File_Name), 'r', encoding='UTF8')

lines = f_read.readlines()

f_read.close()


# 타겟 행, 열의 데이터 반환 및 출력

Taget_Data = lines[Target_Row].split(",")[Target_Column]

print(Taget_Data)


전체 코드

위에서 설명한 코드를 하나로 합쳐보았습니다. Error 발생여부 또한 확인한 코드이니 활용하시면 되겠습니다. 아래의 코드는 사실 for문을 붙여 Iteration을 해서 여러 파일의 데이터를 가져오기 위한 기본 코드입니다.


# 패키지 선언

import pandas as pd


# 원하는 행, 열 번호 선언

Target_Row = 3

Target_Column = 7


# 파일 경로 및 이름 선언

Directory = "D:/WorkHard"

File_Name = "S"


# File Open, Data 저장 to lines

f_read = open('{}/{}.csv'.format(Directory, File_Name), 'r', encoding='UTF8')

lines = f_read.readlines()

f_read.close()


# 타겟 행, 열의 데이터 반환 및 출력

Taget_Data = lines[Target_Row].split(",")[Target_Column]

print(Taget_Data)


추가 Iteration 코드

위에서 작성한 코드로 csv 파일 내 원하는 값을 반환 받아보았지만 아직 필요한 곳에 사용하기 위해서는 for문 작업을 해줘야 합니다. 해당 코드는 아래와 같습니다. 이러한 코드를 사용하기 위해서는 파일들이 Index, 숫자로 구성되야 합니다. 위 절에서 설명한 전체 코드에서 추가된 코드는 이탤릭체에 밑줄을 그어 작성되었으니, 참고하시기 바랍니다.


# 패키지 선언

import pandas as pd


# 원하는 행, 열 번호 선언

Target_Row = 3

Target_Column = 7


# 파일 경로 및 이름 선언

Directory = "D:/WorkHard"

File_Name = "S"

Merge = []


# For문 작성

Iteration = [1, 2, 3, 4, 5]

for i in Iteration:


    # File Open, Data 저장 to lines

    f_read = open('{}/{}{}.csv'.format(Directory, File_Name, i), 'r', encoding='UTF8')

    lines = f_read.readlines()

    f_read.close()


    # 타겟 행, 열의 데이터 반환 및 출력

    Taget_Data = lines[Target_Row].split(",")[Target_Column]

    print(Taget_Data)


    # Merge 변수에 Append

    Result = [int(i), float(Taget_Data)]

    Merge.append(Result)


# csv 저장

data_to_csv = pd.DataFrame(Merge)

data_to_csv.to_csv('{}/MergeData.csv'.format(Directory), header=False, index=False)


마무리

이번 포스팅에서는 제가 실무를 하면서 자주 사용하는 csv 파일 내 특정 행, 열의 값을 가져오는 코드를 작성 및 공유하였습니다. 여러분도 위와 같은 코드를 업무에 적용해서 귀찮은 작업은 컴퓨터에게 맡기시고 커피한잔하시면 좋겠습니다.


댓글