python实例(一)

写在前面

开发工具:pycharm
python 版本:2.7

需求:将很多的wav或pcm文件,通过给定的网址,进行语义解析,然后将结果按照指定的json格式进行保存输出,可以的话考虑性能,比方说给定1万个文件的情况。

需要导入的模块

import os
#json相关
import json
#线程池
import threadpool
#请求相关
import requests
#正则相关
import re

#声明的全局变量
filesResult = []
threadPollCount = 10
resultJsonData = []
复制代码

文件遍历

def showFileTree(path):
    for root, dirs, files in os.walk(path, topdown=False):
         print "root", to_unicode(root)
         print "dir", dirs
        # addFilePath(to_unicode(root), files, "wav|pcm")
        # filterFile(to_unicode(root),files,"wav")
        # filesResult.append(files)
复制代码

正则匹配

def addFilePath(rootpath, files, postfix):
    for file in files:
        # print rootpath+os.path.sep + file
        pattern = re.compile(postfix)
        if pattern.findall(file):
            filesResult.append(rootpath + os.path.sep + file)
复制代码

多线程请求

线程池不懂用法看这里

def startThreadPool(filesPath):
    # filesPath 应该是一个集合,文件路径的集合
    # 我需要做的是将文件路径取出来,放到每一个线程池所需要的参数里面

    file_list = []
    for file in filesResult:
        temp = ([file], None)
        file_list.append(temp)

    pool = threadpool.ThreadPool(threadPollCount) # 相当于创建线程
    # makeRequests参数的含义:第一个参数为目标函数为线程需要执行的具体函数,
    # 第二个参数为集合,其中里面存放list和map,第一个为list,第二个为map,表明第一个参数需要用到的参数,比方说这里requestNet函数需要一个参数
    requestss = threadpool.makeRequests(requestNet, file_list) #相当于是将线程池与调用的函数相绑定,

    [pool.putRequest(req) for req in requestss]

    pool.wait()
复制代码

request请求

def requestNet(file):
    url = "http://48.haitou.cc:50080/asr-test/recognize"
    files = {'audioData': open(file, 'rb')}
    res = requests.post(url, files=files)
    showJsonData(file, res.text)#这里注意是res.text从而获取到返回的内容
复制代码

json解析

#json格式{"state": "OK", "code": 0, "result": {"text": "小杜小杜", "code": 1}}
def showJsonData(filepath, res):
    text = json.loads(res)
    # print to_unicode(filepath + "对应的结果是:"),
    print filepath,
    print "对应的结果是:",
    err = 0
    if text['state'] == "OK":
        print text['result']['text']
        err = 0;
    else:
        print text['state']
        err = -1
    #保存数据
    # 需要 进行裁剪
    resultFile = filepath[filepath.rindex("\\")+1:]
    jsonResult = {
        "mText": to_unicode(text['result']['text']).encode("utf-8"),
        "fileName": to_unicode(resultFile).encode("utf-8"),
        "errCode": err,
        "engineName": "引擎名称"
    }
    resultJsonData.append(jsonResult)
复制代码

json写入文件

def writeData(data):
    # {
    #     "mText": 识别结果,
    #     "fileName": 处理的音频的名字,
    #     "errCode": 错误码,
    #     "engineName": 引擎的名字
    # }

    # 写文件
    resultFile = open(resultFileName, 'w') #每次都会覆盖之前的文件
    json_str = json.dumps(data,ensure_ascii=False) #这里注意ensure_ascii =Flase
    print json_str
    resultFile.write(json_str)
    resultFile.close()
复制代码

字符编码

def to_unicode(string):
    if isinstance(string, unicode):
        return string
    try:
        string_uni = string.decode("UTF-8")
        return string_uni
    except UnicodeDecodeError:
        pass
复制代码

执行

def main():
    # wavSrcPath = raw_input("target:")
    # print wavSrcPath
    wavSrcPath =  "C:\\Users\\telen\\Desktop\\python脚本"
    showFileTree(to_unicode(wavSrcPath))
    # print "+++++++++++++++++"
    # showFile(filesResult)
    startThreadPool(filesResult)
    writeData(resultJsonData)
复制代码

FAQ

  1. 怎么安装request?
    pip install threadpool
  1. 怎么安装pip?
    python "D:\Program Files\python2.7\Lib\requests-2.4.3\setup.py" install 找到相应的setup.py 即可安装,有了这个之后我终于知道怎么用github上面的python项目了。原来都有setup.py 只要找到相应的setup.py就可以用了。 表示我以前真的不知道,怎么用github上面的项目到自己的工程里面。
  1. 不懂怎么改字符编码? 请看这里

转载于:https://juejin.im/post/5c98967c6fb9a070d8782fd7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值