前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python内容识别

python内容识别

作者头像
简单、
发布2018-07-18 14:39:29
1.5K0
发布2018-07-18 14:39:29
举报

首先,这次又是一个公司的一个任务。任务的要求是将截图中的数据给提取出来,这里面的数据都是不一样的。测试文件为100万份。(本文就只用一份测试数据,因为数据原因这一份测试数据也是假的,不过格式什么的都是一样的。)程序非常的简单。

testData
testData

需求: 一、将红色区域的数据内容定位后,识别出来。 二、输出成能看懂的数据或文件或者图片等。

三、程序不允许断掉,不可以影响程序继续运行。

难题和问题分析: 一、我们需要怎么来处理(废话~。~) 二、那堆乱码应该怎么去定位?(哪里是开始,哪里是结束)

三、一般万条数据肯定有一些我们处理不了。该怎样合理解决?

解决问题: 一、寻找一些特征

特征
特征

(1)我们可以看到数据中有--my类似这样的特殊符号的标识。这下面跟着的就是有效的数据。所以我们先记录下来,用来切片。--my-my-my-boundary-my-my-my (2)然后我在有效数据块的结尾都会看到一串类似这样的标识符。

标识符2
标识符2

(3)编写正则:

正则
正则
代码语言:javascript
复制
name="RequestBody"[\s\S]*Content-Disposition: [^\s]* name=[^\s]* filename="([^"]*)"\s*Content-Type: [^\s]*\s*([\S\s]*?)\s*----

我们打开 RegexBuddy(没有的自行百度下载哟),将数据放在下面,正则放在上面。成功匹配。我们开始写程序。


程序实现:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
"""

__author__ = 'se7en'

__date__ = '17/3/24 上午11:32'
"""
from re import compile

bodyCode = '--my-my-my-boundary-my-my-my'
imageEncod = compile(
    r'name="RequestBody"[\s\S]*Content-Disposition: [^\s]* name=[^\s]* filename="([^"]*)"\s*Content-Type: [^\s]*\s*([\S\s]*?)\s*----')

    
def content():
    with open('test.xmpf','r') as f:
        contents =  f.read()

        bounds = contents.split(bodyCode)
        bounds = bounds[1:-1]
        for bound in bounds:
            imageEncod_match = imageEncod.search(bound)

            if imageEncod_match:
                img_name = imageEncod_match.group(1)  # 匹配文件名称
                nameF = img_name[-3:]  # 匹配后缀名
                con = imageEncod_match.group(2)  # 匹配文件内容
                fileFormart = {
                    'jpg': "jpg",
                    'gif': "gif",
                    'png': "png",
                }
                print con #打印匹配的内容
                choose = fileFormart.get(nameF, "No data!")
                make_file(con) # 将图片另存为

def make_file(choose):
    with open('test.jpg','w') as f:
        f.write(choose)

content()

好了,我们运行下看下结果。

run
run

到了这里,数据已经提取出来了。但是这样的程序第一不美观,第二后期肯定有很多的重复功能,而且,我们的任务需求还需要程序在运行的时候不能异常中断。所以我们还需要对程序进行加工。


程序加工:

代码语言:javascript
复制
 # -*- coding: utf-8 -*-
"""

__author__ = 'se7en'

__date__ = '17/3/24 上午11:32'
"""
from re import compile
import os
bodyCode = '--my-my-my-boundary-my-my-my'
imageEncod = compile(
    r'name="RequestBody"[\s\S]*Content-Disposition: [^\s]* name=[^\s]* filename="([^"]*)"\s*Content-Type: [^\s]*\s*([\S\s]*?)\s*----')

def get_file():
    with open('test.xmpf','r') as f:
        try:
            con = f.read()
            return content(con)
        except:
            return None


def content(con):
        con = con.split(bodyCode)
        con = con[1:-1]
        for bound in con:
            imageEncod_match = imageEncod.search(bound)

            if imageEncod_match:
                img_name = imageEncod_match.group(1)  # 匹配文件名称
                nameF = img_name[-3:]  # 匹配后缀名
                con = imageEncod_match.group(2)  # 匹配文件内容
                fileFormart = {
                    'jpg': "jpg",
                    'txt': "txt",
                    'gif': "gif",
                    'doc': "doc",
                    'xls': "xls",
                    'pdf': "pdf",
                    'png': "png",
                }
                print con
                choose = fileFormart.get(nameF, "No data!")
                make_file(con,img_name)
                query(img_name,Type=nameF)

def query(*args,**kwargs):
    for ar in args:
        print u"提取 {name}完成".format(name=ar)
    for key,value in kwargs.items():
        print u"图片类型是:{namef}".format(namef=value)

def make_file(choose,name):
    with open(name, 'w') as f:
        f.write(choose)


if __name__ == '__main__':
    
    get_file()

到了这一步我们还需要考虑哪些问题? 一、这只是针对一份文件的提取,那么100万份呢。 二、所有数据的编码格式是否都是utf8或者常见的编码呢。 三、自然语言处理在提取一些数据到时候为什么会用到类似chardet的类库呢(难道编码也是个头疼的问题吗,百度不是很容易就解决了吗?内心独白:很头疼)。

Tags: None

Archives QR Code

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三、程序不允许断掉,不可以影响程序继续运行。
  • 三、一般万条数据肯定有一些我们处理不了。该怎样合理解决?
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档