V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tedd
V2EX  ›  Python

第一个Python脚本,期待着各位的点评 ~

  •  
  •   tedd · 2012-08-24 23:24:44 +08:00 · 3321 次点击
    这是一个创建于 4255 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用了整个下午+饭后到现在的时间才把这个脚本憋出来,先后买了<可爱的Python>、<Python核心编程>,以及一大堆Python电子书,但都没有看完过,光看书容易要不了会儿就打瞌睡了...,那还是直接用吧,不懂的地方就Google,譬如我在写这个脚本中Google过‘python how to write dictionary into file’ 以及一些抱错信息。

    这算是自己的第一个Python脚本,期待着各位的点评,脚本的结构、数据结构的应用等任何意见和建议我都洗耳恭听,相信通过实战更加能帮助我的学习,谢谢先 ~

    # -*- coding: cp936 -*-

    # 脚本用途:通过已有的issue key,调用jira soap api getAvailableActions by issue key,获取每个issue当前available的action值,放入字典并写入文件

    import SOAPpy
    import SOAPpy.Types

    soap = SOAPpy.WSDL.Proxy('https://...?wsdl')
    user = 'xxx'
    password = 'xxx'
    auth = soap.login(user, password)

    # 将所有issue key手动作为list载入,400 < len(issueKeys) <2500,这么大的list会影响运行速度吗?
    issueKeys = ['issueKey001', 'issueKey002',...]

    issueDict = {}

    # 创建函数,调用jira soap api getAvailableActions by issue key,原本是在接下来这段代码的loop中直接调用这个api,但一直出错,只有先定义个函数将值抓出来
    def getActions(issueKey):
    return soap.getAvailableActions(auth, issueKey)

    # 遍历所有issue key,将所有issue下available的action找出来并放到{issueKey:action}字典中去
    for issueKey in issueKeys:
    for action in getActions(issueKey):
    issueDict[issueKey] = action['name']

    f = open(r'c:/test.txt','w')

    # 发现网络掉包严重的时候无法将所有的action获取到,因此加入了如下这个if...else...条件
    if len(issueDict) != len(issueKeys):
    f.write('oops...please try it again...')
    f.close()
    else:
    # 遍历字典,写入文件,issueKey availbleAction
    for k in issueDict.keys():
    f.write(k)
    f.write(' ')
    for i in issueDict[k]:
    f.write('%s' % i)
    f.write('\n')
    f.close()
    9 条回复    1970-01-01 08:00:00 +08:00
    fanzeyi
        1
    fanzeyi  
       2012-08-24 23:25:29 +08:00
    代码可以贴到 gist.github.com
    tedd
        2
    tedd  
    OP
       2012-08-24 23:30:57 +08:00
    谢谢@fanzeyi,我来试下

    git://gist.github.com/3452007.git
    <script src="https://gist.github.com/3452007.js"> </script>
    fanzeyi
        3
    fanzeyi  
       2012-08-24 23:31:36 +08:00
    tedd
        4
    tedd  
    OP
       2012-08-24 23:33:04 +08:00
    请问@fanzeyi 这是如何贴出来的呢?我将两个链接都直接贴了出来但是都没有反应
    lidashuang
        5
    lidashuang  
       2012-08-24 23:34:01 +08:00
    fanzeyi
        6
    fanzeyi  
       2012-08-24 23:34:37 +08:00
    @tedd http://gist.github.com/ + 编号 就行了
    tedd
        7
    tedd  
    OP
       2012-08-25 07:34:53 +08:00
    谢谢fanzeyi,又学到一条
    alsotang
        8
    alsotang  
       2012-08-25 22:35:57 +08:00
    for action in getActions(issueKey):
    issueDict[issueKey] = action['name']
    这一句看着不舒服,我怀疑issueDict里面会有issueKey被replace掉

    把dict写入文件的话,不知你写入文件的目的是什么。可以用JSON来保存吧我想,因为毕竟都是字符串嘛;如果不那么通用的话,Python自带了cPickle可以用啊,用来序列化存储Python数据结构的。

    auth的命名建议用g_auth,在getActions里面见到auth这个不知来源的变量名觉得突兀。
    tioover
        9
    tioover  
       2012-08-25 23:51:44 +08:00
    @livid 见 #3 是不是应该在CSS里面指定 .gist 的宽度?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3879 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:06 · PVG 13:06 · LAX 22:06 · JFK 01:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.