用于使用 Excel 的 Python 资源

openpyxl

一个用于读取/写入Excel 2010 xlsx/xlsm文件的Python库。Homepage

Author: Eric Gazoni, Charlie Clark
Source code: http://bitbucket.org/openpyxl/openpyxl/src
Issues: http://bitbucket.org/openpyxl/openpyxl/issues
Generated: Feb 04, 2019
License: MIT/Expat
Version: 2.5.15

介绍

openpyxl 是一个 Python 库,用于读/写 Excel 2010 xlsx/xlsm/xltx/xltm 文件。

它诞生于缺乏现有的库,可以从Python本地读取/写入 Office Open XML 格式。

PHPExcel团队的所有荣誉都是基于PHPExcel的。

pip install et-xmlfile
pip install jdcal

pip install openpyxl

# 可选库:
pip install lxml

示例代码

from openpyxl import Workbook
wb = Workbook()

# grab the active worksheet
ws = wb.active

# Data can be assigned directly to cells
ws['A1'] = 42

# Rows can also be appended
ws.append([1, 2, 3])

# Python types will automatically be converted
import datetime
ws['A2'] = datetime.datetime.now()

# Save the file
wb.save("sample.xlsx")

完整代码

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

# 操作excel

from openpyxl import Workbook
from openpyxl import load_workbook

import time

#读取xlsx文件
def read_xlsx(file_name):
    # 打开xlsx文件
    wb = load_workbook(file_name)
    # 获取表格名称列表:  # ==> [u'Sheet1', u'Sheet2', u'Sheet3']
    wb.get_sheet_names()
    # 或 wb.sheetnames

    # 获取一个工作表
    ws = wb["Sheet1"]
    ws = wb.get_sheet_by_name('Sheet1')
    ws = wb.get_sheet_by_name(sheet_names[0])
    ws = wb.active  # 获取活动的工作表
    ws = wb.get_active_sheet()

    # 获取当前工作表名称
    ws.title

    # 获取行数、列数
    ws.max_row
    ws.max_column

    # 获取某个单元格的值
    cell_A1 = ws.cell(row = 1, column = 1).value

    # ws.cell('A1')已弃用,请用ws['A1']
    ws.cell('A1').value
    ws['A1'].value

    # 访问多个单元格  # ==> ((<Cell u'Sheet1'.A1>, <...>), (<...>, <...>))
    cell_range = ws['A1':'C2']
    for row in cell_range:
        for cell in row:
            print cell.value
        print "\n"

#写入xlsx文件
def write_xlsx(file_name):
    #打开一个Excel
    wb = Workbook()

    # 获取活动的工作表  # 默认:<Worksheet "Sheet">
    ws = wb.active

    # 更改sheet的名字
    ws.title = "Sheet_test"

    # 创建一个工作表,不指定title默认为:"Sheet"
    ws = wb.create_sheet(title="cool")

    ws.cell(row = 1 , column = 1).value = u'客户公司id'
    ws.cell(row = 1 , column = 2).value = u'登陆人数'
    ws.cell(row = 1 , column = 3).value = u'最多在线人数'

    ws['A2'] = '111'
    ws['B2'].value = '222'
    # ws.cell('C2').value = '333' # 已弃用,请用ws['A1']

    # 保存
    wb.save(file_name)

if __name__ == '__main__':
    date = time.strftime('%Y%m%d',time.localtime())

    # file_name = u'功能号统计.xlsx'
    # read_xlsx(file_name)

    file_name = date + '.xlsx'
    write_xlsx(file_name)

xlsxwriter

github

XlsxWriter 是一个 Python 模块,用于以 Excel 2007+ XLSX 文件格式写入文件。

XlsxWriter 可用于将文本、数字、公式和超链接写入多个工作表,它支持格式等功能,包括:

它支持 Python 3.4+ 和 PyPy3,并且仅使用标准库。

pip install XlsxWriter

这是一个简单的例子:

import xlsxwriter


# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()

# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Write some simple text.
worksheet.write('A1', 'Hello')

# Text with formatting.
worksheet.write('A2', 'World', bold)

# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)

# Insert an image.
worksheet.insert_image('B5', 'logo.png')

workbook.close()

xlwings

Homepage, GitHub

xlwings 是一个 BSD 许可 Python 库,可以轻松地从 Excel 调用 Python,反之亦然:

完全支持 Numpy 数组Pandas Series/DataFrames。 xlwings 支持的工作簿很容易在 WindowsmacOS 上分发和工作。

xlwings 包含 xlwings 包中除“pro”文件夹(即“xlwings.pro”子包)之外的所有文件。

pip install xlwings

import xlwings as xw

csv

所谓的 CSV(逗号分隔值)格式是电子表格和数据库最常见的导入和导出格式。 没有“CSV 标准”,因此该格式在操作上是由许多读写它的应用程序定义的。 缺乏标准意味着不同应用程序生成和使用的数据经常存在细微的差异。 这些差异可能会让处理多个源的 CSV 文件变得烦人。 尽管如此,虽然分隔符和引号字符有所不同,但总体格式足够相似,因此可以编写可以有效操作此类数据的单个模块,从而向程序员隐藏读取和写入数据的细节。

csv 模块实现了以 CSV 格式读取和写入表格数据的类。 它允许程序员说“以 Excel 首选的格式写入此数据”或“从 Excel 生成的此文件中读取数据”,而无需了解 Excel 使用的 CSV 格式的精确详细信息。 程序员还可以描述其他应用程序理解的 CSV 格式或定义自己的专用 CSV 格式。

csv 模块的readerwriter对象读取和写入序列。程序员还可以使用 DictReaderDictWriter 类以字典形式读取和写入数据。

完整代码

import time
import csv

#写入csv文件
def writeCsv(allCount):
    date = time.strftime('%Y%m%d',time.localtime())
    csvfile = file(date + '.csv', 'wb')
    writer = csv.writer(csvfile)
    writer.writerow([u'客户公司id'.encode('gbk'), u'登陆人数'.encode('gbk'), u'最多在线人数'.encode('gbk')])

    for secCount in allCount:
        writer.writerow([getSecID(secCount), allCount[secCount][0], allCount[secCount][1]])

    csvfile.close()

#读取csv文件
def readCsv(allCount):
    date = time.strftime('%Y%m%d',time.localtime())
    csvfile = file(date + '.csv', 'wb')
    reader = csv.reader(csvfile)

    # 首行
    head = next(reader)

    # 按行读取
    for line in reader:
        privateIP, publicIP, Zone, InstanceName, hostname, hostname2 = line
        print(line)
        break

    csvfile.close()

    # 读取某一列数据
    reader = csv.reader(f)
    column = [row[1] for row in reader]
    print(column)

office excel导出csv文件格式处理

office excel导出的csv文件,日期格式形如 xxx,2020/1/9,xxx 导入hive会报错,需要处理成 2020-01-09,使用shell脚本处理

# 月份加0
sed -i 's#,\(20..\)/\(.\)/#,\1/0\2/#g' digital_operation1.CSV 
# 天数加0
sed -i 's#,\(20../../\)\(.\),#,\10\2,#g' digital_operation1.CSV 
#/换成-
sed -i 's#\(20..\)/\(..\)/\(..\),#\1-\2-\3,#g' digital_operation1.CSV

xlutils

Homepage, github, Python2, Python3

该软件包提供了一系列用于处理 Excel 文件的实用程序。 由于这些实用程序可能需要 xlrdxlwt 包中的一个或两个,因此它们在这里收集在一起, 与任一包分开。 这些实用程序分为包内的几个模块,每个模块的文档如下:

Installation

Do the following in your virtualenv:

pip install xlutils

示例

根据只读xls生成新的xls,保留原始格式。(from chatgpt)

import xlrd
from xlutils.copy import copy

import sys
import os

def copy_excel_file(input_file, output_file):
    # 打开源文件
    workbook = xlrd.open_workbook(input_file, formatting_info=True)

    # 创建新的 xls 文件
    new_workbook = copy(workbook)

    # 保存新的 xls 文件
    new_workbook.save(output_file)

if __name__ == '__main__':
    try:
        input_file = sys.argv[1]
    except IndexError as e:
        print('Usage: python3 %s <xls_file>' % __file__)
        sys.exit()

    output_file, _ = os.path.splitext(input_file)
    output_file += '_output.xls'

    copy_excel_file(input_file, output_file)

    print("%s 文件已创建。" % output_file)

xlrd

HomePage, github

xlrd 是一个用于从历史 .xls 格式的 Excel 文件中读取数据和格式化信息的库。

警告

该库将不再读取 .xls 文件以外的任何内容。 对于读取较新文件格式的替代方案,请参阅 http://www.python-excel.org/。

以下内容也不受支持,但会安全可靠地被忽略:

不支持受密码保护的文件,并且此库无法读取这些文件。

安装

pip install xlrd

快速入门:

import xlrd
book = xlrd.open_workbook("myfile.xls")
print("The number of worksheets is {0}".format(book.nsheets))
print("Worksheet name(s): {0}".format(book.sheet_names()))
sh = book.sheet_by_index(0)
print("{0} {1} {2}".format(sh.name, sh.nrows, sh.ncols))
print("Cell D30 is {0}".format(sh.cell_value(rowx=29, colx=3)))
for rx in range(sh.nrows):
    print(sh.row(rx))

在命令行中,这将显示每个文件中每个工作表的第一、第二和最后一行:

python PYDIR/scripts/runxlrd.py 3rows *blah*.xls

完整代码

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

# 读取excel

import xlrd

#打开Excel文件读取数据
rdbook = xlrd.open_workbook('1.xls')

#获取一个工作表
table = rdbook.sheets()[1]                #通过索引顺序获取
table = data.sheet_by_index(0)           #通过索引顺序获取
table = data.sheet_by_name(u'Sheet1')    #通过名称获取

#获取行数
nrows = table.nrows
#获取列数
ncols = table.ncols

#print nrows
#print ncols

#获取某一行数据(列表),0即为列的表头
row = table.row_values(0)
#获取某一列数据(列表),0即为行的表头
col = table.col_values(0)

#输出某一行、某一列(列表)
#print row
#print col

#逐个输出某一行、某一列
for i in range(ncols):
    print('%d:%3s;')%(i,row[i]),
print

for j in range(nrows):
    print('%d:%3s;')%(j,col[j]),
print

#获取某一单元格数据
cell_A1 = table.cell(0,0).value
print cell_A1

#获取某一单元格数据,使用行列索引
cell_C3 = table.row(2)[2].value
print cell_C3

xlwt

HomePage, github

这是一个供开发人员用来生成与 Microsoft Excel 版本 95 至 2003 兼容的电子表格文件的库。

该包本身是纯 Python,不依赖于标准 Python 发行版之外的模块或包。

在使用此软件包之前,请阅读以下内容:https://groups.google.com/d/msg/python-excel/P6TjJgFVjMI/g8d0eWxTBQAJ

安装

在您的虚拟环境中执行以下操作:

pip install xlwt

快速入门

import xlwt
from datetime import datetime

style0 = xlwt.easyxf('font: name Times New Roman, color-index red, bold on',
    num_format_str='#,##0.00')
style1 = xlwt.easyxf(num_format_str='D-MMM-YY')

wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')

ws.write(0, 0, 1234.56, style0)
ws.write(1, 0, datetime.now(), style1)
ws.write(2, 0, 1)
ws.write(2, 1, 1)
ws.write(2, 2, xlwt.Formula("A3+B3"))

wb.save('example.xls')

文档

文档可以在 xlwt 包的 docs 目录中找到。 如果这些还不够,请查阅示例目录中的代码和源代码本身。

最新文档也可以在以下位置找到:https://xlwt.readthedocs.io/en/latest/

完整代码

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

# 写入excel

import xlwt

#打开一个Excel
wtbook = xlwt.Workbook()

#添加一个sheet
sheet = wtbook.add_sheet('test')

#将数据写入excel
sheet.write(0,0,'haha')

#保存
wtbook.save('wt.xls')