pandas 모듈은 excel 파일의 대량 읽기 및 저장 도구를 실현합니다

16485 단어 python

excel을 조작하는 도구 클래스


logger 모듈 도입 필요
import os.path
import time

import pandas as pd

from util import logger

LOGGER = logger.MyLogger("excelUtils").getLogger()


class ExcelReader:
    """
     excel 
    """

    def __init__(self, path, file_suffix=".xls", sort_by=None):
        self.path = path
        self.file_suffix = file_suffix
        self.sort_by = sort_by

    def setPath(self, path, file_suffix=".xls", sort_by=None):
        self.__init__(path, file_suffix=file_suffix, sort_by=sort_by)

    def getData(self, sheet_name=0, skiprows=0, skipfooter=0, to_records=False):
        """
         excel data
        :return:
        """
        if not os.path.exists(self.path):
            raise FileNotFoundError()
        data = pd.DataFrame()
        if os.path.isfile(self.path):
            data = pd.read_excel(self.path, sheet_name=sheet_name, skiprows=skiprows, skipfooter=skipfooter)
            LOGGER.info(" Excel , 1 ")
        elif os.path.isdir(self.path):
            xls_names = [x for x in os.listdir(self.path) if x.endswith(self.file_suffix)]
            for xls_name in xls_names:
                df = pd.read_excel(os.path.join(self.path, xls_name), sheet_name=sheet_name, skiprows=skiprows,
                                   skipfooter=skipfooter)
                data = data.append(df, sort=False)
            LOGGER.info(" Excel , " + str(xls_names.__len__()) + " ")
        if self.sort_by:
            data.sort_values(by=self.sort_by, inplace=True)
        if to_records:
            return data.to_dict(orient="records")
        return data


class ExcelSaver:
    """
     excel 
    """

    def __init__(self, to_path, file_suffix=".xlsx", file_name=None):
        self.to_path = to_path
        self.file_suffix = file_suffix
        self.file_name = file_name

    #  list excel
    def saveDictArray(self, data):
        """
         excel
        :param data:  list
        :return:
        """
        if data:
            path = self.combinePath()
            data_frame = pd.DataFrame.from_records(data)
            writer = pd.ExcelWriter(path, engin='openpyxl')
            data_frame.to_excel(excel_writer=writer, index=None)
            writer.save()
            writer.close()

    def saveDataFrame(self,data_frame):
        if data_frame:
            path = self.combinePath()
            writer = pd.ExcelWriter(path, engin='openpyxl')
            data_frame.to_excel(excel_writer=writer, index=None)
            writer.save()
            writer.close()

    def combinePath(self):
        path = self.to_path
        if not os.path.exists(path):
            os.makedirs(path)
        if self.file_name:
            file_name = self.file_name
        else:
            file_name = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
        path = os.path.join(path, file_name + self.file_suffix)
        return path

사용:
from util import excelUtil
excel 읽기:
excelReader = excelUtil.ExcelReader(path="")
path를 파일로 입력할 때 지정한 파일을 직접 읽습니다. path는 파일 이름을 포함하고 dataFrame로 되돌아갑니다.
path를 경로로 입력할 때 경로 아래 접미사 찾기 file_suffix 파일, 모든 내용을 읽고 데이터 프레임으로 통합
excelRader.getData(sheet_name = 0,skiprows = 0,skipfooter = 0,to_records = True)
다음을 수행합니다.
​ sheet_name는 지정한 sheet 페이지를 읽을 수 있습니다. int는 몇 번째인지, sheet의 구체적인 이름을 전달할 수 있습니다.
skiprows: 건너뛰는 줄, 0은 전체 읽기, 1은 맨 위에서 첫 번째 줄을 건너뛰는 것을 나타냅니다.
skipfooter: 건너뛴 끝, 0은 전체 읽기, 1은 밑에서부터 마지막 줄을 계산한 것을 나타냅니다.
​ to_records:list (dict) 형식으로 되돌릴지 여부, 기본적으로 데이터 프레임 데이터 되돌려줍니다.
excel 저장:
excelSaver = excelUtil.ExcelSaver(to_path = “”,file_name = “”)
excelSaver.saveDictArray(data)
데이터를 전송하려면 하나의 수조/list가 필요합니다. 내부는 하나의 데이터 구조가 같은dict입니다. 키 값은 excel 열명으로 자동으로 읽힙니다.
to_path 는 지정한 경로에 저장됩니다.file_name은 파일 이름입니다. 기본값은 현재 시간으로 생성됩니다.

좋은 웹페이지 즐겨찾기