zoukankan      html  css  js  c++  java
  • Python小实验——读&写Excel文件内容

    安装xlrd模块和xlwt模块

    读取Excel文件了内容需要额外的模块—— (xlrd),在官网上可以找到下载:https://pypi.python.org/pypi/xlrd#downloads

    下载完毕后解压到当前文件夹,点击进入,可以找到一个 setup.py 文件,在当前目录下打开 cmd 窗口,运行“python setup.py install”(需要提前将python添加环境变量),成功后,去Python Shell中运行“import xlrd”试一下,应该没什么问题。解压得到的xlrd模块文件都可以删除。

    另外,如果你使用PyCharm的话,那就更好办了,点击"File" -> "Settings" -> "Project interpreter" -> "+" -> 查找"xlrd" -> "install package",OK了。

    同样的,写入Excel文件需要的是 (xlwt) 模块,方法类似,就不多解释了。下载地址:https://pypi.python.org/pypi/xlwt

    读取Excel文件

    不得不说,这个模块简单易懂,容易上手,几分钟就会了。直接看代码如何使用吧!

    class myExcel(object):
        def __init__(self, excelPath):
            self.path = excelPath
    
        def readExcel(self):
            excel = xlrd.open_workbook(self.path)
    
            # get sheet names
            print(excel.sheet_names())
            # get sheet content(By index or By name)
            sheet = excel.sheet_by_index(0)
            sheet1 = excel.sheet_by_name("Sheet1")
            sheet2 = excel.sheets()[0]
            # get sheet info
            print(sheet.name, sheet.nrows, sheet.ncols)
            # get row/col content
            row = sheet.row_values(0)
            col = sheet.col_values(0)
            print(row, col)
            # get cell value
            cell = sheet.cell(0, 0)
            print(cell.value)
            print(sheet.cell_value(0, 0))
            print(sheet.row(0)[0].value)
            # get cell ctype:0empty 1string 2number 3date 4boolean 5error
            print(sheet.cell(0, 0).ctype)
    
            return excel
    
        def printExcel(self):
            excel = self.readExcel()
            sheet = excel.sheets()[0]
            for i in range(0, sheet.nrows):
                row = sheet.row_values(i)
                for item in row:
                    print(item, '|')
    

    写入Excel文件

    这个也还行,单纯的加入数据还是挺简单的。

    发现了一个问题,这个xlwt模块只能保存为".xls"表格,有点绝望。

    稍微查了一下,果然存在可以保存为".xlsx"表格的模块,叫做 (openpyxl),请参考:https://www.cnblogs.com/anpengapple/p/6399304.html?utm_source=itdadao&utm_medium=referral

        def writeOneRow(self, sheet, nrow, rowList):
            # 格式:{单元格:背景黄色;字体:红色粗体}
            style = xlwt.easyxf('pattern: pattern solid, fore_colour yellow;font: bold 0, color red;')
    
            ncol = 0
            for row in rowList:
                sheet.write(nrow, ncol, row, style)
                ncol += 1
    
        def writeExcel(self, excelName):
            # create a Excel and add sheet
            excel = xlwt.Workbook()
            sheet = excel.add_sheet('sheet1', cell_overwrite_ok=True)
    
            headList = ['Stu_id', 'name', 'sex']
            data = [['1', 'stu1', '男'],
                    ['2', 'stu2', '男'],
                    ['3', 'stu3', '女'],]
    
            self.writeOneRow(sheet, 0, headList)
            for nrow in range(0, 3):
                self.writeOneRow(sheet, nrow, data[nrow])
    
            excel.save(excelName)
    

    Excel转换成Markdown格式

    其实这是我做这个小练习的主要原因,由于随笔都是用Markdowm格式写的,有一篇随笔是LeetCode所有题目的列表:
    LeetCode All in One题解汇总(持续更新中...)。我才不想一条一条加呢!稍微转换一下,添加点格式符号就OK了。

        def toMarkdown(self, mdName):
            excel = self.readExcel()
            sheet = excel.sheets()[0]
    
            file = open(mdName, 'w', encoding='utf-8')
            rowStr = "| %d | [%s]() | %.3f | '%s' |
    "
    
            try:
                file.write('| 编号 | 题名 | 过题率 | 难度 |' + '
    ')
                file.write('| :------------: |:---------------: | :------------:| :-----:|' + '
    ')
    
                for i in range(0, sheet.nrows):
                    row = sheet.row_values(i)
                    data = rowStr % (int(row[0]), str(row[1]), float(row[2]), str(row[3]))
                    file.write(data)
    
                print('成功写入文件,共有%d条记录...' % sheet.nrows)
            except Exception as e:
                print(e)
            finally:
                file.close()
    

    完整代码:https://github.com/Pacsiy/learnPY/tree/master/LeetCodeAllProblem


    本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


  • 相关阅读:
    取随机数
    端口号
    cut命令
    渗透
    ssh免密登陆
    漏洞扫描
    信息收集1:DNSEUM命令
    Centos6与Centos7的区别
    HAPROXY+KEEPALIVED实现负载均衡
    this的用法
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8577699.html
Copyright © 2011-2022 走看看