您好,匿名用户
随意问技术百科期待您的加入

求助:将Python脚本转化为可被调用的模块?

0 投票

以下是我写的一段代码,目的是从指定目录中批量提示文件中的指定内容(PackageName),以脚本的形式运行可以满足需求,但现在想做成模块以被其它脚本调用,自己改了很久都不能满足,现发出来求助下高手,不胜感激。

# -*- coding: GBK -*-
__author__ = 'Kevin'
import os
import re

def traverse(path):
    '''
    遍历指定路径下的所有文件
    '''
    filesName = []
    for root,dirs,files in os.walk(path):
        for fn in files:
            filesName.append(os.path.join(root,fn))
        return filesName

def reCrash(s):
    '''
    正则匹配提取出crashed package name
    如:从// CRASH: com.wandoujia.phoenix2 (pid 3903)中提取出com.wandoujia.phoenix2
    '''
    m = '//\sCRASH:\s(.*)\s[(]pid\s(.*)[)]'
    n = re.match(m,s)
    if n:
        return n.group(1)
    else:
        return None

filesList = traverse('D:\\TestDoc')

crashCount = []

for i in range(len(filesList)):
    try:
        for line in open("%s" %filesList[i]):
            mCrash = reCrash(line)
            if mCrash:
                crashCount.append(mCrash)
    except:
        print('Faild to open file the %s.' %filesList[i])

print(crashCount)

通过网友的帮助问题已解决,代码如下:

# -*- coding: GBK -*-
__author__ = 'A'
import os
import re

def traverse(path):
    '''
    遍历指定路径下的所有文件
    '''
    filesName = []
    for root,dirs,files in os.walk(path):
        for fn in files:
            filesName.append(os.path.join(root,fn))
    return filesName

def reCrash(s):
    '''
    正则匹配提取出crashed package name
    如:从// CRASH: com.wandoujia.phoenix2 (pid 3903)中提取出com.wandoujia.phoenix2
    '''
    m = '//\sCRASH:\s(.*)\s[(]pid\s(.*)[)]'
    n = re.match(m,s)
    if n:
        return n.group(1)
    else:
        return None

def crashlist(filesList):
    crashCount = []
    for filesName in filesList:
        try:
            for line in open(filesName):
                mCrash = reCrash(line)
                if mCrash:
                    crashCount.append(mCrash)
        except:
            print('Faild to open file the %s.' %filesName)
    return crashCount

if __name__ == '__main__':
    filesList = traverse('D:\\TestDoc')
    print crashlist(filesList)
用户头像 提问 2014年 6月7日 @ Rider 上等兵 (281 威望)
分享到:

你的回答

隐私保护: 您的邮箱仅用于发送系统通知。
请输入验证码:
    图片验证码看不清?
登录注册后不会被要求输入验证码。

0 投票
 
最佳答案

你这个代码写的不给力,应该属于python新手级别,你要将这些代码作为一个模块调用,很显然你是调用模块中的属性,而模块的属性就是模块顶层缩进的那些names,包括函数名,类名,以及其它模块级的全局标量,所以你这个代码要改,就应该把下面的那些代码通过一个函数封装起来

def func(directory):
    filesList = traverse(directory)

    crashCount = []

    for afile in filesList:
        try:
            for line in open(afile):
                mCrash = reCrash(line)
                if mCrash:
                    crashCount.append(mCrash)
        except:
            print('Faild to open file the %s.' % afile)

    print(crashCount)

这样你在其它的模块中导入该模块后,func这个属性就可见了,你也就可以通过调用这个函数来干你想干的事,我声明代码不一定完全正确,而且你的代码有很多风格上的问题

用户头像 回复 2014年 6月7日 @ Dr. Mundo 上等兵 (281 威望)
选中 2013年 9月7日 @Rider
提一个问题:

相关问题

0 投票
1 回复 28 阅读
0 投票
1 回复 5 阅读
+1 投票
1 回复 305 阅读
用户头像 提问 2013年 4月13日 @ 苏尐沫 上等兵 (212 威望)
0 投票
1 回复 67 阅读
用户头像 提问 2012年 12月1日 @ Cancer 上等兵 (211 威望)
0 投票
1 回复 68 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...