python - सीएसवी कनवर्टर करने के लिए एक्सएलएस




excel csv (7)

मैं अपने .xlsx और .xls फ़ाइल को .csv में परिवर्तित करने के लिए पायथन में win32.client का उपयोग कर रहा हूं। जब मैं इस कोड को निष्पादित करता हूं तो यह एक त्रुटि दे रहा है। मेरा कोड है:

def convertXLS2CSV(aFile):
    '''converts a MS Excel file to csv w/ the same name in the same directory'''

    print "------ beginning to convert XLS to CSV ------"

    try:
        import win32com.client, os
        from win32com.client import constants as c
        excel = win32com.client.Dispatch('Excel.Application')

        fileDir, fileName = os.path.split(aFile)
        nameOnly = os.path.splitext(fileName)
        newName = nameOnly[0] + ".csv"
        outCSV = os.path.join(fileDir, newName)
        workbook = excel.Workbooks.Open(aFile)
        workbook.SaveAs(outCSV, c.xlCSVMSDOS) # 24 represents xlCSVMSDOS
        workbook.Close(False)
        excel.Quit()
        del excel

        print "...Converted " + nameOnly + " to CSV"
    except:
        print ">>>>>>> FAILED to convert " + aFile + " to CSV!"

convertXLS2CSV("G:\\hello.xlsx")

मैं इस कोड में त्रुटि नहीं ढूंढ पा रहा हूं। कृपया मदद करे।


@andi मैंने आपके कोड का परीक्षण किया, यह बहुत अच्छा काम करता है, लेकिन

मेरी चादरों में इस तरह का एक स्तंभ है

2013-03-06T04: 00: 00

उसी सेल में दिनांक और समय

यह निर्यात के दौरान खराब हो जाता है, यह निर्यात की गई फाइल में ऐसा है

41275.0416667

अन्य कॉलम ठीक हैं।

दूसरी तरफ csvkit, उस कॉलम के साथ ठीक है लेकिन केवल एक शीट निर्यात करता है, और मेरी फाइलों में कई हैं।


Xlrd का उपयोग करना ऐसा करने का एक दोषपूर्ण तरीका है, क्योंकि आप एक्सेल में दिनांक प्रारूप खो देते हैं।

मेरा उपयोग मामला निम्नलिखित है।

एक्सेल फ़ाइल को एक से अधिक शीट के साथ लें और प्रत्येक को अपनी फाइल में कनवर्ट करें।

मैंने xlsx2csv लाइब्रेरी का उपयोग करके ऐसा किया है और इसे उपप्रोसेस का उपयोग करके कॉल किया है।

import csv
import sys, os, json, re, time
import subprocess

def csv_from_excel(fname):
    subprocess.Popen(["xlsx2csv " + fname + " --all -d '|' -i -p "
                      "'<New Sheet>' > " + 'test.csv'], shell=True)

    return

lstSheets = csv_from_excel(sys.argv[1])

time.sleep(3) # system needs to wait a second to recognize the file was  written

with open('[YOUR PATH]/test.csv') as f:
    lines = f.readlines()
    firstSheet = True

    for line in lines:
        if line.startswith('<New Sheet>'):
            if firstSheet:
                sh_2_fname = line.replace('<New Sheet>', '').strip().replace(' - ', '_').replace(' ','_')
                print(sh_2_fname)
                sh2f = open(sh_2_fname+".csv", "w")
                firstSheet = False
            else:
                sh2f.close()
                sh_2_fname = line.replace('<New Sheet>', '').strip().replace(' - ', '_').replace(' ','_')
                print(sh_2_fname)
                sh2f = open(sh_2_fname+".csv", "w")
        else:
            sh2f.write(line)
sh2f.close()

मैं pandas उपयोग करूंगा। प्रक्रिया को तेज करने के लिए कम्प्यूटेशनल हेवी पार्ट्स साइथन या सी-एक्सटेंशन में लिखे गए हैं और वाक्यविन्यास बहुत साफ है। उदाहरण के लिए, यदि आप "your_workbook.xls" फ़ाइल से "sheet1" को "your_csv.csv" फ़ाइल में बदलना चाहते हैं, तो आप केवल read_excel स्तर के फ़ंक्शन read_excel और DataFrame क्लास से to_csv को विधि निम्न प्रकार का उपयोग करते हैं:

import pandas as pd
data_xls = pd.read_excel('your_workbook.xls', 'Sheet1', index_col=None)
data_xls.to_csv('your_csv.csv', encoding='utf-8')

encoding='utf-8' सेट करना अन्य उत्तरों में उल्लिखित UnicodeEncodeError कम करता है।


मैं xlrd का उपयोग करता हूं - यह तेज़, क्रॉस प्लेटफ़ॉर्म है और फ़ाइल के साथ सीधे काम करता है। ध्यान देने योग्य एक बात - यह xlsx फ़ाइलों पर काम नहीं करती है - इसलिए आपको अपनी एक्सेल फ़ाइल को xls के रूप में सहेजना होगा। संपादित करें: संस्करण 0.8.0 के रूप में, xlrd दोनों xlrd और xlrd फ़ाइलों को पढ़ता है।

 import xlrd
 import csv

 def csv_from_excel():

    wb = xlrd.open_workbook('your_workbook.xls')
    sh = wb.sheet_by_name('Sheet1')
    your_csv_file = open('your_csv_file.csv', 'wb')
    wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)

    for rownum in xrange(sh.nrows):
        wr.writerow(sh.row_values(rownum))

    your_csv_file.close()

हम xls फ़ाइल को csv फ़ाइल में कनवर्ट करने के लिए पायथन के पांडस लिब का उपयोग कर सकते हैं नीचे कोड xls फ़ाइल को csv फ़ाइल में कनवर्ट करेगा। पीडी के रूप में आयात पांडा

स्थानीय पथ से एक्सेल फ़ाइल पढ़ें:

df = pd.read_excel("C:/Users/IBM_ADMIN/BU GPA Scorecard.xlsx",sheetname=1)

कॉलम पर मौजूद ट्रिम स्पेस:

df.columns = df.columns.str.strip()

सीएसवी फ़ाइल में डेटा फ्रेम भेजें जो पाइप प्रतीक को सीमित और सूचकांक के बिना होगा:

df.to_csv("C:/Users/IBM_ADMIN/BU GPA Scorecard csv.csv",sep="|",index=False)

हो सकता है कि किसी को कोड के उपयोगी उपयोग के टुकड़े को उपयोगी लगे। यह एक्सेल की कार्यपुस्तिका में सभी स्प्रेडशीट्स से सीएसवी बनाने की अनुमति देता है।

# -*- coding: utf-8 -*-
import xlrd
import csv
from os import sys

def csv_from_excel(excel_file):
    workbook = xlrd.open_workbook(excel_file)
    all_worksheets = workbook.sheet_names()
    for worksheet_name in all_worksheets:
        worksheet = workbook.sheet_by_name(worksheet_name)
        with open('{}.csv'.format(worksheet_name), 'wb') as your_csv_file:
            wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
            for rownum in xrange(worksheet.nrows):
                wr.writerow([unicode(entry).encode("utf-8") for entry in worksheet.row_values(rownum)])

if __name__ == "__main__":
    csv_from_excel(sys.argv[1])

स्कॉट मिंग से एक answer हवाला देते हुए, जो एकाधिक चादर वाली कार्यपुस्तिका के साथ काम करता है:

यहां एक पायथन स्क्रिप्ट getsheets.py ( mirror ) है, आपको इसका उपयोग करने से पहले pandas और xlrd इंस्टॉल करना चाहिए।

इसे चलाओ:

pip3 install pandas xlrd  # or `pip install pandas xlrd`

यह कैसे काम करता है?

$ python3 getsheets.py -h
Usage: getsheets.py [OPTIONS] INPUTFILE

Convert a Excel file with multiple sheets to several file with one sheet.

Examples:

    getsheets filename

    getsheets filename -f csv

Options:
-f, --format [xlsx|csv]  Default xlsx.
-h, --help               Show this message and exit.

कई xlsx में कनवर्ट करें:

$ python3 getsheets.py goods_temp.xlsx
Sheet.xlsx Done!
Sheet1.xlsx Done!

All Done!

कई सीएसवी में कनवर्ट करें:

$ python3 getsheets.py goods_temp.xlsx -f csv
Sheet.csv Done!
Sheet1.csv Done!

All Done!

getsheets.py :

# -*- coding: utf-8 -*-

import click
import os
import pandas as pd


def file_split(file):
    s = file.split('.')
    name = '.'.join(s[:-1])  # get directory name
    return name


def getsheets(inputfile, fileformat):
    name = file_split(inputfile)
    try:
        os.makedirs(name)
    except:
        pass

    df1 = pd.ExcelFile(inputfile)
    for x in df1.sheet_names:
        print(x + '.' + fileformat, 'Done!')
        df2 = pd.read_excel(inputfile, sheetname=x)
        filename = os.path.join(name, x + '.' + fileformat)
        if fileformat == 'csv':
            df2.to_csv(filename, index=False)
        else:
            df2.to_excel(filename, index=False)
    print('\nAll Done!')


CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])


@click.command(context_settings=CONTEXT_SETTINGS)
@click.argument('inputfile')
@click.option('-f', '--format', type=click.Choice([
    'xlsx', 'csv']), default='xlsx', help='Default xlsx.')
def cli(inputfile, format):
    '''Convert a Excel file with multiple sheets to several file with one sheet.

    Examples:

    \b
        getsheets filename

    \b
        getsheets filename -f csv
    '''
    if format == 'csv':
        getsheets(inputfile, 'csv')
    else:
        getsheets(inputfile, 'xlsx')


cli()




export-to-csv