python如何把csv转化为xls_使用python将csv转换为xls

这是一个Python脚本,使用pyExcelerator库将CSV文件转换为Excel(XLS)格式。脚本支持配置分隔符和文本换行字符,并可以按行数拆分输出文件。它读取CSV文件,如果指定了--title选项,会将第一行作为标题行写入Excel工作表。
摘要由CSDN通过智能技术生成

#!/usr/local/bin/python

# Tool to convert CSV files (with configurable delimiter and text wrap

# character) to Excel spreadsheets.

import string

import sys

import getopt

import re

import os

import os.path

import csv

from pyExcelerator import *

def usage():

""" Display the usage """

print "Usage:" + sys.argv[0] + " [OPTIONS] csvfile"

print "OPTIONS:"

print "--title|-t: If set, the first line is the title line"

print "--lines|-l n: Split output into files of n lines or less each"

print "--sep|-s c [def:,] : The character to use for field delimiter"

print "--output|o : output file name/pattern"

print "--help|h : print this information"

sys.exit(2)

def openExcelSheet(outputFileName):

""" Opens a reference to an Excel WorkBook and Worksheet objects """

workbook = Workbook()

worksheet = workbook.add_sheet("Sheet 1")

return workbook, worksheet

def writeExcelHeader(worksheet, titleCols):

""" Write the header line into the worksheet """

cno = 0

for titleCol in titleCols:

worksheet.write(0, cno, titleCol)

cno = cno + 1

def writeExcelRow(worksheet, lno, columns):

""" Write a non-header row into the worksheet """

cno = 0

for column in columns:

worksheet.write(lno, cno, column)

cno = cno + 1

def closeExcelSheet(workbook, outputFileName):

""" Saves the in-memory WorkBook object into the specified file """

workbook.save(outputFileName)

def getDefaultOutputFileName(inputFileName):

""" Returns the name of the default output file based on the value

of the input file. The default output file is always created in

the current working directory. This can be overriden using the

-o or --output option to explicitly specify an output file """

baseName = os.path.basename(inputFileName)

rootName = os.path.splitext(baseName)[0]

return string.join([rootName, "xls"], '.')

def renameOutputFile(outputFileName, fno):

""" Renames the output file name by appending the current file number

to it """

dirName, baseName = os.path.split(outputFileName)

rootName, extName = os.path.splitext(baseName)

backupFileBaseName = string.join([string.join([rootName, str(fno)], '-'), extName], '')

backupFileName = os.path.join(dirName, backupFileBaseName)

try:

os.rename(outputFileName, backupFileName)

except OSError:

print "Error renaming output file:", outputFileName, "to", backupFileName, "...aborting"

sys.exit(-1)

def validateOpts(opts):

""" Returns option values specified, or the default if none """

titlePresent = False

linesPerFile = -1

outputFileName = ""

sepChar = ","

for option, argval in opts:

if (option in ("-t", "--title")):

titlePresent = True

if (option in ("-l", "--lines")):

linesPerFile = int(argval)

if (option in ("-s", "--sep")):

sepChar = argval

if (option in ("-o", "--output")):

outputFileName = argval

if (option in ("-h", "--help")):

usage()

return titlePresent, linesPerFile, sepChar, outputFileName

def main():

""" This is how we are called """

try:

opts,args = getopt.getopt(sys.argv[1:], "tl:s:o:h", ["title", "lines=", "sep=", "output=", "help"])

except getopt.GetoptError:

usage()

if (len(args) != 1):

usage()

inputFileName = args[0]

try:

inputFile = open(inputFileName, 'r')

except IOError:

print "File not found:", inputFileName, "...aborting"

sys.exit(-1)

titlePresent, linesPerFile, sepChar, outputFileName = validateOpts(opts)

if (outputFileName == ""):

outputFileName = getDefaultOutputFileName(inputFileName)

workbook, worksheet = openExcelSheet(outputFileName)

fno = 0

lno = 0

titleCols = []

reader = csv.reader(inputFile, delimiter=sepChar)

for line in reader:

if (lno == 0 and titlePresent):

if (len(titleCols) == 0):

titleCols = line

writeExcelHeader(worksheet, titleCols)

else:

writeExcelRow(worksheet, lno, line)

lno = lno + 1

if (linesPerFile != -1 and lno >= linesPerFile):

closeExcelSheet(workbook, outputFileName)

renameOutputFile(outputFileName, fno)

fno = fno + 1

lno = 0

workbook, worksheet = openExcelSheet(outputFileName)

inputFile.close()

closeExcelSheet(workbook, outputFileName)

if (fno > 0):

renameOutputFile(outputFileName, fno)

if __name__ == "__main__":

main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值