zoukankan      html  css  js  c++  java
  • 使用Python操作excel文件

    依赖环境

    读取excel表里的数据,需要依赖的包是xlrd,首先需要安装xlrd包

    pip3 install xlrd

    简单的常用命令

    复制代码
    #coding=utf-8
    import xlrd
    '''
    文件路径比较重要,要以这种方式去写文件路径不用
    ''' file_path = r'd:/功率因数.xlsx' #读取的文件路径 file_path = file_path.decode('utf-8') #文件中的中文转码 data = xlrd.open_workbook(file_path) #获取数据 table = data.sheet_by_name('历史数据') #获取sheet nrows = table.nrows #获取总行数 ncols = table.ncols #获取总列数 table.row_values(i) #获取一行的数值 table.col_values(i) #获取一列的数值 #获取一个单元格的数值 cell_value = table.cell(a,b).value
    复制代码

     本地excel文件测试版本

    #-*- coding=utf-8 -*-
    import xlrd
    def open_excel(file= 'file.xls'):
        try:
            data = xlrd.open_workbook(file)
            return data
        except Exception as e:
            print(str(e))
    
    def excel_table_byname(file= u'D:\test\学信网zh.xlsx',colnameindex=0,by_name=u'Sheet1'):#修改自己路径
         data = open_excel(file)
         table = data.sheet_by_name(by_name) #获得表格
         nrows = table.nrows  # 拿到总共行数
         colnames = table.row_values(colnameindex)  # 某一行数据 ['姓名', '用户名', '联系方式', '密码']
         list = []
         for rownum in range(1, nrows): #也就是从Excel第二行开始,第一行表头不算
             row = table.row_values(rownum)
             if row:
                 app = {}
                 for i in range(len(colnames)):
                     app[colnames[i]] = row[i] #表头与数据对应
                 list.append(app)
         return list
    
    def main():
        tables = excel_table_byname()
        for row in tables:
           print(row)
    if __name__ =="__main__":
        main()

    读取excel文件录入数据库

    代码示例

    复制代码
    # coding: utf-8
    from __future__ import unicode_literals
    from questionnaire.models import Paper, QuestionnaireTag, QuestionnaireAnswer, ChoiceQuestion, QuestionnaireQuota, 
        SubjectQuestion
    import xlrd
    import os
    from education import settings
    
    
    def choicequestion_init():
        # 遍历文件夹
        file_package = os.listdir(os.path.join(os.path.join(settings.BASE_DIR, 'education', 'init', 'choicequestion')))
        for file in file_package:
            if not os.path.isdir(file):  # 判断是否是文件夹,不是文件夹才打开
                workbook = xlrd.open_workbook(os.path.join(
                    os.path.join(settings.BASE_DIR, 'education', 'init', 'choicequestion') + "/" + file))  # 打开文件
                sheet_names = workbook.sheet_names()
                # 循环Excel文件的所有行
                for sheet in sheet_names:
                    sheet = workbook.sheet_by_name(sheet)
                    if sheet.name:
                        tag_obj = QuestionnaireTag.objects.create(name=sheet.name)
                    # 创建试卷
                    paper_obj = Paper()
                    paper_obj.name = tag_obj.name
                    paper_obj.questionnairetag = tag_obj
                    paper_obj.save()
    
                    last_obj = None
                    for index, row in enumerate(sheet.get_rows()):
                        if index == 0:
                            continue
                        if row[0].value:
                            if not QuestionnaireQuota.objects.filter(name=row[0].value):
                                parent_obj = QuestionnaireQuota.objects.create(name=row[0].value)
                            if not QuestionnaireQuota.objects.filter(name=row[1].value):
                                children_obj = QuestionnaireQuota.objects.create(name=row[1].value, parent=parent_obj)
                                last_obj = parent_obj
                        else:
                            if not QuestionnaireQuota.objects.filter(name=row[0].value):
                                children_obj = QuestionnaireQuota.objects.create(name=row[1].value, parent=last_obj)
    
                        type_name = ""
                        if row[3].value == "单选":
                            type_name = "single"
                        elif row[3].value == "多选":
                            type_name = "multiple"
    
                        is_textfield = False
                        if row[4].value == "":
                            is_textfield = False
                        elif row[4].value == "":
                            is_textfield = True
    
                        ans = {}
                        num = 65
                        for i in range(5, len(row)):
                            ans["option_%s" % (chr(num))] = row[i].value
                            num += 1
    
                        question_obj = ChoiceQuestion.objects.create(stem=row[2].value, type=type_name,
                                                                     is_textfield=is_textfield, **ans)
    
                        question_obj.questionnairequotas.add(children_obj)
                        question_obj.questionnairetags.add(tag_obj)
                        question_obj.save()
                        paper_obj.choicequestions.add(question_obj)
                        paper_obj.save()
    复制代码
  • 相关阅读:
    自己的思考
    spring MVC整合freemarker
    手把手教你搭建SpringMVC——最小化配置
    深入hibernate的三种状态
    maven 构建slf4j1.7.7之简单测试与源码解析
    maven 构建slf4j1.7.7之简单测试与源码解析
    (转)URI和URL的区别
    Spring缓存机制的理解
    (转)oracle 高水位线详解
    (转)PL/SQL Developer使用技巧、快捷键
  • 原文地址:https://www.cnblogs.com/DI-DIAO/p/9163286.html
Copyright © 2011-2022 走看看