[Python] csv · txt 파일의 행 데이터를 읽고 목록에 1 차원 배열로 저장

8063 단어 txtCSV파이썬


읽은 행 데이터를 리스트에 격납하는 작업이 자주 있었으므로, 함수화해 구현해 가고 싶습니다.

구현



파이썬 3.7.6
  • txt 파일

  • txt
    Apple
    Grape
    Orange
    Melon
    Peach
    
  • CSV 파일



  • 인수에 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 파일의 내용을 리스트 할 기회가 있을지도 모른다고 생각했으므로 일단 남겨 둡니다.

    좋은 웹페이지 즐겨찾기