programing

Python csv를 xlsx로 변환

elecom 2023. 4. 13. 20:32
반응형

Python csv를 xlsx로 변환

게시물에는 csv에서 xls로 변환하는 Python의 예가 나와 있습니다.

그러나 내 파일의 행이 65536개를 넘었기 때문에 xls는 동작하지 않습니다.파일 이름을 xlsx로 지정해도 차이가 없습니다.xlsx로 변환할 Python 패키지가 있나요?

다음은 xlsxwriter를 사용하는 예입니다.

import os
import glob
import csv
from xlsxwriter.workbook import Workbook


for csvfile in glob.glob(os.path.join('.', '*.csv')):
    workbook = Workbook(csvfile[:-4] + '.xlsx')
    worksheet = workbook.add_worksheet()
    with open(csvfile, 'rt', encoding='utf8') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                worksheet.write(r, c, col)
    workbook.close()

참고로 Excel 2007 xlsx/xlsm 파일을 읽고 쓸 수 있는 openpyxl이라는 패키지도 있습니다.

내 라이브러리와 함께pyexcel,

 $ pip install pyexcel pyexcel-xlsx

하나의 명령줄로 실행할 수 있습니다.

from pyexcel.cookbook import merge_all_to_a_book
# import pyexcel.ext.xlsx # no longer required if you use pyexcel >= 0.2.2 
import glob


merge_all_to_a_book(glob.glob("your_csv_directory/*.csv"), "output.xlsx")

각 CSV에는 자체 시트가 있으며 이름은 파일 이름이 됩니다.

팬더를 사용한 심플한 2라인 코드 솔루션

  import pandas as pd

  read_file = pd.read_csv ('File name.csv')
  read_file.to_excel ('File name.xlsx', index = None, header=True)

최초 설치 openpyxl:

pip install openpyxl

그 후, 다음과 같이 입력합니다.

from openpyxl import Workbook
import csv


wb = Workbook()
ws = wb.active
with open('test.csv', 'r') as f:
    for row in csv.reader(f):
        ws.append(row)
wb.save('name.xlsx')

팬더 라이브러리를 단독으로 사용하여 .csv 파일을 읽고 .xlsx 파일로 저장하는 답변을 추가합니다.이 예에서는,pandas.read_csv(문서 링크) 및pandas.dataframe.to_excel(문서 링크).

완전히 재현 가능한 예에서는 numpy를 사용하여 난수만 생성합니다.이 예에서는 독자적인 .csv 파일을 사용하는 경우 삭제할 수 있습니다.

import pandas as pd
import numpy as np

# Creating a dataframe and saving as test.csv in current directory
df = pd.DataFrame(np.random.randn(100000, 3), columns=list('ABC'))
df.to_csv('test.csv', index = False)

# Reading in test.csv and saving as test.xlsx

df_new = pd.read_csv('test.csv')
writer = pd.ExcelWriter('test.xlsx')
df_new.to_excel(writer, index = False)
writer.save()

행을 열거/루프하지 않고 CSV에서 XLSX로의 간단한 파일 변환:

import pyexcel

sheet = pyexcel.get_sheet(file_name="myFile.csv", delimiter=",")
sheet.save_as("myFile.xlsx")

주의:

  1. file_name 이 정말로 길 경우(패스 제외 30자 미만), Excel 이 로드하려고 하면 XLSX 파일이 에러를 발생시킵니다.엑셀이 오류를 수정해 주겠다고 제안할 예정인데 답답하네요.
  2. 디렉토리내의 모든 CSV 파일을 1개의 XLSX 워크북에 조합하는 훌륭한 답이 있습니다.이것은 단순히 1 대 1 CSV 파일을 XLSX 파일로 변환하는 것과는 다른 사용 사례에 적합합니다.

openpyxl lib를 사용하는 방법:

import csv
from openpyxl import Workbook

def convert_csv_to_xlsx(self):
    wb = Workbook()
    sheet = wb.active

    CSV_SEPARATOR = "#"

    with open("my_file.csv") as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                for idx, val in enumerate(col.split(CSV_SEPARATOR)):
                    cell = sheet.cell(row=r+1, column=idx+1)
                    cell.value = val

    wb.save("my_file.xlsx")

간단한 방법이 있다

import os
import csv
import sys

from openpyxl import Workbook

reload(sys)
sys.setdefaultencoding('utf8')

if __name__ == '__main__':
    workbook = Workbook()
    worksheet = workbook.active
    with open('input.csv', 'r') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, col in enumerate(row):
                for idx, val in enumerate(col.split(',')):
                    cell = worksheet.cell(row=r+1, column=c+1)
                    cell.value = val
    workbook.save('output.xlsx')

언급URL : https://stackoverflow.com/questions/17684610/python-convert-csv-to-xlsx

반응형