Skip to content

Latest commit

 

History

History
144 lines (97 loc) · 4.27 KB

qa-std-modules.md

File metadata and controls

144 lines (97 loc) · 4.27 KB

json和simplejson的区别

问题 链接

json就是simple,加入到标准库. json在2.6加入,simplejson在2.4+,2.6+,更有优势

另外,simplejson更新频率更高,如果你想使用最新版本,建议用simplejson

好的做法是

try: import simplejson as json
except ImportError: import json

另外,可以关注二者性能上的比较

如何用http下载一个文件

问题 链接

直接使用urllib

import urllib
urllib.urlretrieve ("http://www.example.com/songs/mp3.mp3", "mp3.mp3")

使用urllib2,并提供一个进度条

import urllib2

url = "http://download.thinkbroadband.com/10MB.zip"

file_name = url.split('/')[-1]
u = urllib2.urlopen(url)
f = open(file_name, 'wb')
meta = u.info()
file_size = int(meta.getheaders("Content-Length")[0])
print "Downloading: %s Bytes: %s" % (file_name, file_size)

file_size_dl = 0
block_sz = 8192
while True:
    buffer = u.read(block_sz)
    if not buffer:
        break

    file_size_dl += len(buffer)
    f.write(buffer)
    status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
    status = status + chr(8)*(len(status)+1)
    print status,

f.close()

使用第三方requests

>>> import requests
>>>
>>> url = "http://download.thinkbroadband.com/10MB.zip"
>>> r = requests.get(url)
>>> print len(r.content)
10485760

argparse可选位置参数

问题 链接

脚本运行 usage: installer.py dir [-h] [-v]

dir是一个位置参数,定义如下

parser.add_argument('dir', default=os.getcwd())

我想让dir变为可选,如果未设置,使用os.getcwd()

不幸的是,当我不指定dir时,得到错误 "Error: Too few arguments"

尝试使用 nargs='?'

parser.add_argument('dir', nargs='?', default=os.getcwd())

例子

>>> import os, argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-v', action='store_true')
_StoreTrueAction(option_strings=['-v'], dest='v', nargs=0, const=True, default=False, type=None, choices=None, help=None, metavar=None)
>>> parser.add_argument('dir', nargs='?', default=os.getcwd())
_StoreAction(option_strings=[], dest='dir', nargs='?', const=None, default='/home/vinay', type=None, choices=None, help=None, metavar=None)
>>> parser.parse_args('somedir -v'.split())
Namespace(dir='somedir', v=True)
>>> parser.parse_args('-v'.split())
Namespace(dir='/home/vinay', v=True)
>>> parser.parse_args(''.split())
Namespace(dir='/home/vinay', v=False)
>>> parser.parse_args(['somedir'])
Namespace(dir='somedir', v=False)
>>> parser.parse_args('somedir -h -v'.split())
usage: [-h] [-v] [dir]

positional arguments:
dir

optional arguments:
-h, --help  show this help message and exit
-v

有什么方法可以获取系统当前用户名么?

问题 链接

至少在Linux和Windows下都可用.就像 os.getuid

>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'

可以看看 getpass 模块

>>> import getpass
>>> getpass.getuser()
'kostya'

可用: Unix, Windows

在Python中如何解析xml

问题 链接

<foo>
<bar>
    <type foobar="1"/>
    <type foobar="2"/>
</bar>
</foo>

如何解析获取xml文件中内容

我建议使用 ElementTree (有其他可用的实现,例如 lxml,他们只是更快, ElementTree提供更简单的编程api)

在使用XML建立Element实例之后,例如使用 XML 函数

for atype in e.findall('type')
    print(atype.get('foobar'))