[Python] csv · txt 파일의 행 데이터를 읽고 목록에 1 차원 배열로 저장
읽은 행 데이터를 리스트에 격납하는 작업이 자주 있었으므로, 함수화해 구현해 가고 싶습니다.
구현
파이썬 3.7.6
txt
Apple
Grape
Orange
Melon
Peach
인수에 txt 또는 csv 파일 경로를 지정하면 읽은 데이터를 목록으로 반환합니다.
import csv
import itertools # 2次元配列=>1次元配列にするため
TEXT_FILE = 'sample.txt'
CSV_FILE = 'sample.csv'
def read_txtfile_as_list(filePath=None):
"""
テキストファイルを読み込み、リストとして返します。
Parameters
----------
filePath : str
Returns
-------
item_list : list of str
"""
with open(filePath, 'r') as f:
text_data = [line.strip() for line in f]
return text_data
def read_csvfie_as_list(filePath=None):
"""
CSVファイルを読み込み、リストとして返します。
Parameters
----------
filePath : str
Returns
-------
item_list : list of str
"""
with open(filePath, 'r') as f:
csv_data = [line for line in csv.reader(f)]
# return sum(csv_data, []) 簡易的な書き方 こっちだと処理が遅い
return list(itertools.chain.from_iterable(csv_data))
def read_file_as_list(filePath=None):
"""
テキストファイルかCSVファイルを読み込み、リストとして返します。
Parameters
----------
filePath : str
Returns
-------
item_list : list of str
"""
if filePath[-4:] == '.txt':
with open(filePath, 'r') as f:
text_data = [line.strip() for line in f]
return text_data
elif filePath[-4:] == '.csv':
with open(filePath, 'r') as f:
csv_data = [line for line in csv.reader(f)]
return list(itertools.chain.from_iterable(csv_data))
else:
return None
# テキストファイルの中身を表示
text_samp1 = read_txtfile_as_list(TEXT_FILE)
print(text_samp1)
# OUTPUT: ['Apple', 'Grape', 'Orange', 'Melon', 'Peach']
# CSVファイルの中身を表示
csv_samp1 = read_csvfie_as_list(CSV_FILE)
print(csv_samp1)
# OUTPUT: ['dog', 'cat', 'cow', 'fox', 'monkey']
# テキスト・CSVファイルの中身を表示
text_samp2 = read_file_as_list(TEXT_FILE)
csv_samp2 = read_file_as_list(CSV_FILE)
print(text_samp2)
print(csv_samp2)
# OUTPUT: ['Apple', 'Grape', 'Orange', 'Melon', 'Peach']
# OUTPUT: ['dog', 'cat', 'cow', 'fox', 'monkey']
쓰고 있는 도중에 행 데이터만을 읽는다면, 표준의
readlines
메소드로 읽어들일 수 있으므로, csv 라이브러리를 임포트할 필요성은 없었구나-라고 생각했습니다만, 향후, csv 파일의 내용을 리스트 할 기회가 있을지도 모른다고 생각했으므로 일단 남겨 둡니다.
Reference
이 문제에 관하여([Python] csv · txt 파일의 행 데이터를 읽고 목록에 1 차원 배열로 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/taiiii123/items/614b3a054112cec1bb4d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)