무거운 csv 파일에서 데이터를 가져 와서 데이터를 업로드하는 앱에서 Excel 파일의 데이터를 가져와야했습니다. 이를 위해 처음에는 xlrd
을 사용하여 Excel 파일을 CSV 파일로 변환했습니다.이 파일은 작은 파일에는 효과적 이었지만 큰 파일은 변환하는 데 많은 시간이 걸렸습니다. 각 줄이 1m 인 6 장짜리 파일을 받았을 때 대기 시간이 너무 길어서 프로세스를 종료하기 전에 40 분을 기다렸습니다. 무거운 파일의 변환 8-10 분에도 지연은 너무 슬프게도, 큰 Excel 파일을 CSV로 변환
openmyxl
라이브러리를 사용하고 있는데,이 라이브러리는 특히
read-only
모드에서
xlrd
보다 훨씬 빠르지 만, 많은.
몇 분 정도 기다리지 않고도 여러 장이있는 큰 Excel 파일을 변환 할 수있는 파이썬의 효율적인 솔루션이 있습니까?
def convertExcelToCSV(excelFilePath, uploadFilePath):
lstCSVFilePaths = []
workbook = load_workbook(excelFilePath, read_only=True)
for worksheet_name in workbook.get_sheet_names():
worksheet = workbook.get_sheet_by_name(name = worksheet_name)
#skip sheet if empty
if worksheet.rows == 0: continue
objCSV = {}
objCSV["fileName"] = worksheet_name + '.csv'
objCSV["isGZip"] = False
csvFilePath = uploadFilePath + "CSV Files/"
#make directory for CSV files that will be made from Excel file
if not os.path.exists(csvFilePath):
os.makedirs(csvFilePath)
fd, csvFilePath = tempfile.mkstemp(suffix=worksheet_name + ".csv", dir=csvFilePath)
objCSV["filePath"] = csvFilePath
with open(csvFilePath, 'w', newline="") as your_csv_file:
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
for rownum in worksheet.rows:
wr.writerow([cell.value for cell in rownum])
your_csv_file.close()
lstCSVFilePaths.append(objCSV)
return lstCSVFilePaths
'팬더'를 사용해보세요. 훨씬 더 짧은 코드도 얻을 수 있습니다 :'import pandas as pd; df = pd.read_excel ('/ path/to/excel.xlsx'); df.to_csv ('/ path/to/csv_file.csv')' – DeepSpace
@DeepSpace 팬더가 내부적으로 xlrd를 사용하여 파일을 읽고 행을 열로 변환하는 것을 보는 DisSpace는 좋은 생각이 아닙니다. –
그래서 나는 이것을 시도했다. "pandas"는'openpyxl'보다 느리다. 6 장 (각 100K 줄)의 파일과 카운트로 7 분 이상되었습니다. –