스택큐힙리스트

Bytes 객체를 csv에서 읽는 방법은 다음과 같습니다. 본문

카테고리 없음

Bytes 객체를 csv에서 읽는 방법은 다음과 같습니다.

스택큐힙리스트 2023. 11. 6. 07:51
반응형

나는 Python의 csv.writer()를 사용하여 트윗의 텍스트를 csv 파일에 저장하기 위해 tweepy를 사용했지만, 저장하기 전에 텍스트를 utf-8로 인코딩해야했습니다. 그렇지 않으면 tweepy에서 이상한 오류가 발생합니다.


지금은 텍스트 데이터가 다음과 같이 저장되어 있습니다:


b'Lorem Ipsum\xc2\xa0Assignment '

다음 코드를 사용하여 이를 디코딩하려고 시도했지만 (다른 열에 더 많은 데이터가 있으므로 텍스트는 3번째 열에 있음):


with open('data.csv','rt',encoding='utf-8') as f:
reader = csv.reader(f,delimiter=',')
for row in reader:
print(row[3])

하지만 텍스트가 디코딩되지 않습니다. .decode('utf-8')을 사용할 수 없습니다. 왜냐하면 csv 리더가 데이터를 문자열로 읽기 때문에 type(row[3])'str'이고, 이를 더 이상 bytes로 변환할 수 없기 때문입니다. 데이터가 한 번 더 인코딩됩니다!


텍스트 데이터를 어떻게 디코딩할 수 있을까요?


편집: csv 파일의 샘플 라인은 다음과 같습니다:

67783591545656656999,3415844,1450443669.0,b'아랍어 과제 때문에 학군 지역 폐쇄: 버지니아주 올구스타 카운티 학군이 ... | @abcde',52,18

Note: 만약 해결책이 인코딩 과정에 있다면, 전체 데이터를 다시 다운로드할 여력이 없음을 주의하세요.

답변 1

가장 쉬운 방법은 아래와 같습니다. 해보세요.


import csv
from io import StringIO
byte_content = b바이트 컨텐츠입니다
content = byte_content.decode()
file = StringIO(content)
csv_data = csv.reader(file, delimiter=,)

답변 2

바이트 객체를 CSV에서 읽는 방법에 대해 알아보겠습니다. CSV 파일은 데이터를 텍스트 형식으로 저장하며, 이러한 파일을 읽거나 쓰기 위해서는 텍스트 데이터를 이진 형식으로 변환해야 합니다. 바이트 객체는 이진 데이터를 다루는 데 사용되며, 파이썬에서는 'bytes' 타입으로 처리됩니다.
CSV 파일을 읽기 위해서는 먼저 파일을 열어야 합니다. 파일을 열 때는 'rb' 모드를 사용하여 이진 형식으로 읽는다는 것을 알려줘야 합니다. 그리고 파일 객체를 생성하여 데이터를 읽을 수 있습니다. 파일 객체를 생성하려면 'open' 함수를 사용하고, 파일 경로와 함께 'rb' 모드를 전달합니다.
파일 객체를 생성한 후에는 'csv' 모듈을 사용하여 데이터를 읽을 수 있습니다. 'csv' 모듈은 CSV 파일의 데이터를 파싱하고, 행과 열로 구분된 데이터를 쉽게 다룰 수 있는 기능을 제공합니다. 'csv' 모듈을 사용하기 위해서는 먼저 모듈을 import 해야 합니다.
이제 'csv' 모듈을 사용하여 파일 객체를 읽을 수 있습니다. 'reader' 함수를 사용하여 데이터를 행 단위로 읽을 수 있으며, 각 행은 리스트 형태로 반환됩니다. 각 행의 데이터는 바이트 형식으로 읽히므로, 필요에 따라 문자열로 변환해야 할 수도 있습니다.
파일을 모두 읽은 후에는 파일을 닫아주어야 합니다. 파일을 닫지 않으면 파일의 자원이 계속해서 점유되어 메모리 낭비가 발생할 수 있습니다. 파일을 닫으려면 파일 객체의 'close' 메소드를 호출하면 됩니다.
바이트 객체를 CSV에서 읽는 방법에 대해 알아보았습니다. CSV 파일을 바이트 형식으로 읽기 위해서는 파일을 이진 모드로 열고, 'csv' 모듈을 사용하여 데이터를 행 단위로 읽으면 됩니다. 파일을 닫지 않는 실수를 방지하기 위해 파일 객체의 'close' 메소드를 호출하는 것도 잊지 마세요.

반응형
Comments