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은 파일 이름입니다. 기본값은 현재 시간으로 생성됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.