表格数据提取

本贴最后更新于 1675 天前,其中的信息可能已经事过境迁
#!/usr/bin/python
# -*- coding: utf-8 -*-
# @Time  : 2020/12/14 13:07
# @Author : cuijianzhe
# @File  : xlwt.py
# @Software: PyCharm

import openpyxl
import requests
import os
import random
name = input('请输入表格名称:')
path = name + '.xlsx'
wb = openpyxl.load_workbook(path)

sheetnames = wb.sheetnames #获取文件中所有的sheet
sheetData = wb[sheetnames[0]]  #第一个sheet的内容

rows_max = sheetData.max_row  #最大行数
cols_max = sheetData.max_column  #最大列数

ApprovalNumber = sheetData.cell(row = 1,column = 4).value
def get_case(): #获取所有表头功能
    case_list = []
    for cols in range(1,cols_max):  #列数
        cases = sheetData.cell(row=1,column=cols).value
        case_list.append(cases.replace('\n\n','\n'))
    return case_list

def generate_code(char):
    all_char = '0123456789qazwsxedcrfvtgbyhnujmikolpQAZWSXEDCRFVTGBYHNUJIKOLP'
    index = len(all_char) - 1
    code = ''
    for _ in range(int(char)):
        num = random.randint(0,index)
        code += all_char[num]
        res = ''.join(code)
    return res

def get_carNum():
    '''    提取并添加站点名称    '''
    # 第一个方法使用列表
    cars_list = [] #存储车牌号
    try:
        for cols in range(1,cols_max):
            carNum = sheetData.cell(row = 1,column = cols).value #每列的值
            if carNum == '车牌号':
                for rows in range(2,rows_max+1):  #遍历最大行数
                    carnumName = sheetData.cell(row = rows,column=cols).value
                    if carnumName != "":
                        cars_list.append(carnumName)
                    else:
                        cars_list.append("空车牌号在第%s行"%(rows))
    except Exception as error:
        print('get车牌号错误', 'error:{}'.format(error))
    return cars_list

def get_url(case_list):
    url_list = []

    for cols in range(1, cols_max):  # 列数
        datas = sheetData.cell(row=1, column=cols).value
        if datas == case_list:
            for rows in range(2,rows_max+1):
                images_url = sheetData.cell(row=rows, column=cols).value
                if images_url != "":
                    url_list.append(images_url.replace('\n\n','\n'))
                else:  #如果此单元格可能为空的话,添加自定义链接占位
                    url_list.append('https://file.cjzshilong.cn/pictures_file/guohui-e67e7b3b.png\n')
        else:
            continue
    return url_list

def Download(url,car_name):
    for num in range(len(car_name)):
        ApprovalNumber = sheetData.cell(row=num+2, column=1).value  # 订单编号
        name = car_name[num] #车牌目录
        name_dir = car_name[num] + '_' + ApprovalNumber #同车牌 不同订单 创建目录
        list_files = os.listdir('./')
        if name not in list_files:
            os.mkdir(name)
            os.chdir(name)
            os.mkdir(name_dir)
            os.chdir(name_dir)
            file_list = url[num].split('\n')
            with open('./统计' + name_dir + '_' + generate_code(4)  + '的图片url_共计' + str(len(file_list)) + '条.txt', 'w', encoding='utf-8') as f:
                f.write(url[num])

            for url_car in file_list:
                if url_car != '':
                    response = requests.get(url_car)
                    with open(name +'_'+ generate_code(15) + '.jpg', 'wb') as car:
                         car.write(response.content)
                    print('%s下载完毕' %name_dir)

            os.chdir('../../')
        else:
            namedir_list = os.listdir('./' + name)
            os.chdir(name)
            if name_dir not in namedir_list:
                os.mkdir(name_dir)
                os.chdir(name_dir)
                file_list = url[num].split('\n')
                with open('./统计' + name_dir + '_' + generate_code(4)  + '的图片url_共计' + str(len(file_list)) + '条.txt', 'w', encoding='utf-8') as f:
                    f.write(url[num])

                for url_car in file_list:
                    if url_car != '':
                        response = requests.get(url_car)
                        with open(name +'_'+ generate_code(15) + '.jpg', 'wb') as car:
                             car.write(response.content)
                        print('%s下载完毕' %name_dir)
                os.chdir('../../')
            else:
                os.chdir(name_dir)
                file_list = url[num].split('\n')
                with open('./统计' + name_dir + '_' + generate_code(4) + '的图片url_共计' + str(len(file_list)) +  '条.txt', 'w', encoding='utf-8') as f:
                    f.write(url[num])

                for url_car in file_list:
                    if url_car != '':
                        response = requests.get(url_car)
                        with open(name + '_' + generate_code(15) + '.jpg', 'wb') as car:
                            car.write(response.content)
                        print('%s下载完毕' % name_dir)
                os.chdir('../../')

if __name__ == '__main__':
    case_list = ['车辆正面照&车辆安全检查照','司机安全照','起始用车仪盘公里数','结束用车仪盘公里数','路桥费照片','停车费照片']
    car_name = get_carNum()
    for func in case_list:
        url_img = get_url(func)
        Download(url_img, car_name)
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
cuijianzhe
6 号黑客成员, 2000-03-03 23:22:13 加入 北京

推荐标签 标签

  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖 • 2 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1127 回帖 • 109 关注
  • 印象笔记
    3 引用 • 16 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    186 引用 • 1021 回帖 • 1 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖 • 2 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 54 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1062 引用 • 3455 回帖 • 151 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 409 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 9 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 617 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    84 引用 • 414 回帖
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 2 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 623 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 253 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 2 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 409 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 116 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 445 关注
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 672 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    115 引用 • 319 回帖
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 830 关注