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




excel csv (8)

मैं अपने .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")

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


हम 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)

स्कॉट मिंग से एक 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()

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()

मैं csvkit का उपयोग करता csvkit , जो xlrd (xls के लिए) और openpyxl (xlsx के लिए) का उपयोग करता है ताकि किसी भी टैब्यूलर डेटा को csv में परिवर्तित किया जा सके।

एक बार स्थापित होने पर, इसकी निर्भरताओं के साथ, यह एक बात है:

python in2csv myfile > myoutput.csv

यह सभी स्वरूप पहचान समस्याओं का ख्याल रखता है, ताकि आप इसे किसी भी टैब्यूलर डेटा स्रोत के बारे में बता सकें। यह क्रॉस-प्लेटफार्म भी है (कोई Win32 निर्भरता नहीं)।


मैं 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()

xlsx2csv पांडा और xlrd से तेज है।

xlsx2csv -s 0 crunchbase_monthly_.xlsx cruchbase

एक्सेल फ़ाइल आमतौर पर एन शीटनाम के साथ आता है।

-s is sheetname index.

फिर, क्रूचबेस फ़ोल्डर बनाया जाएगा, प्रत्येक शीट xlsx से संबंधित है एक एकल सीएसवी में परिवर्तित हो जाएगा।

पीएस csvkit भी भयानक है।


मैंने सभी टावरों का परीक्षण किया है, लेकिन वे मेरे लिए बहुत धीमे थे। यदि आपके पास एक्सेल स्थापित है तो आप COM का उपयोग कर सकते हैं।

मैंने सोचा कि शुरुआत में यह धीमा होगा क्योंकि यह वास्तविक एक्सेल एप्लिकेशन के लिए सब कुछ लोड करेगा, लेकिन यह बड़ी फ़ाइलों के लिए नहीं है। हो सकता है क्योंकि फ़ाइलों को खोलने और सहेजने के लिए एल्गोरिदम एक बहुत ही अनुकूलित संकलित कोड चलाता है, माइक्रोसॉफ्ट लोग इसके बाद बहुत पैसा कमाते हैं।

import sys
import os
import glob
from win32com.client import Dispatch

def main(path):
    excel = Dispatch("Excel.Application")
    if is_full_path(path):
        process_file(excel, path)
    else:
        files = glob.glob(path)
        for file_path in files:
            process_file(excel, file_path)
    excel.Quit()

def process_file(excel, path):
    fullpath = os.path.abspath(path)
    full_csv_path = os.path.splitext(fullpath)[0] + '.csv'
    workbook = excel.Workbooks.Open(fullpath)
    workbook.Worksheets(1).SaveAs(full_csv_path, 6)
    workbook.Saved = 1
    workbook.Close()


def is_full_path(path):
    return path.find(":") > -1

if __name__ == '__main__':
    main(sys.argv[1])

यह बहुत कच्चा कोड है और त्रुटियों, प्रिंट सहायता या किसी भी चीज़ की जांच नहीं करेगा, यह केवल प्रत्येक फ़ाइल के लिए एक सीएसवी फ़ाइल तैयार करेगा जो आपके द्वारा फ़ंक्शन में दर्ज पैटर्न से मेल खाता है ताकि आप केवल कई फाइलों को एक्सेल एप्लिकेशन लॉन्च कर सकें एक बार।


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

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

2013-03-06T04: 00: 00

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

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

41275.0416667

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

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





export-to-csv