Tag - python

? python ?    2021-03-10 17:11:40    237    0    0

Python 断言 并行迭代 异常

断言 assert

如果知道必须满足特定条件,程序才能正确地运行,可在程序中添加assert语句充当检查点,这很有帮助。还可在条件后面添加一个字符串,对断言做出说明。

  1. >>> age = -1
  2. >>> assert 0 < age < 100, 'The age must be realistic'
  3. Traceback (most recent call last):
  4. File "<stdin>", line 1, in ?
  5. AssertionError: The age must be realistic

并行迭代 用内置函数 zip

有时候,你可能想同时迭代两个序列。假设有下面两个列表:

  1. names = ['anne', 'beth', 'george', 'damon']
  2. ages = [12, 45, 32, 102]

一个很有用的并行迭代工具是内置函数zip,它将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可使用list将其转换为列表。

  1. >>> list(zip(names, ages))
  2. [('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]

“缝合”后,可在循环中将元组解包。

  1. for name, age in zip(names, ages):
  2. print(name, 'is', age, 'years old')

函数zip可用于“缝合”任意数量的序列。需要指出的是,当序列的长度不同时,函数zip将在最短的序列用完后停止“缝合”。

  1. >>> list(zip(range(5), range(100000000)))
  2. [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]

迭代时获取索引

使用内置函数enumerate。

  1. for index, string in enumerate(strings):
  2. xxxxxx

用while 等待用户输入

可以使用循环来确保用户输

? python ?    2021-03-10 17:11:35    1275    0    0

函数open的参数mode的最常见取值

描 述
'r' 读取模式(默认值)
'w' 写入模式
'x' 独占写入模式
'a' 附加模式
'b' 二进制模式(与其他模式结合使用)
't' 文本模式(默认值,与其他模式结合使用)
'+' 读写模式(与其他模式结合使用)

显式地指定读取模式的效果与根本不指定模式相同。写入模式让你能够写入文件,并在文件不存在时创建它。
独占写入模式更进一步,在文件已存在时引发FileExistsError异常。在写入模式下打开文件时,既有内容将被删除(截断),并从文件开头处开始写入;
如果要在既有文件末尾继续写入,可使用附加模式。
'+'可与其他任何模式结合起来使用,表示既可读取也可写入。例如,要打开一个文本文件进行读写,可使用'r+'。(你可能还想结合使用seek,详情请参阅本章后面的旁注“随机存取”。)请注意,'r+'和'w+'之间有个重要差别:后者截断文件,而前者不会这样做。默认模式为'rt'.

每当调用f.write(string)时,你提供的字符串都将写入到文件中既有内容的后面。

  1. >>> f = open('somefile.txt', 'w')
  2. >>> f.write('Hello, ')
  3. 7
  4. >>> f.write('World!')
  5. 6
  6. >>> f.close()

读取也一样简单,只需告诉流你要读取多少个字符(在二进制模式下是多少字节),如下例所示:

  1. >>> f = open('somefile.txt', 'r')
  2. >>> f.read(4)
  3. 'Hell'
  4. >>> f.read()
  5. 'o, World!

f.read() 读取了文件中余下的全部内容

三个标准流

模块sys的一节中,提到了三个标准流。
sys.stdin
一个标准数据输入源是sys.stdin。当程序从标准输入读取时,你可通过输入来提供文本,也可使用管道将标准输入关联到其他程序的标准输出.
sys.stdout
提供给print的文本出现在sys.stdout中,向input提供的提示信息

? python ?    2021-03-10 17:07:35    1231    0    0

文档字符串

除了# 注释,有另一种编写注释的方式,就是添加独立的字符串。在有些地方,如def语句后面(以及模块和类的开头,),添加这样的字符串很有用。放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来。下面的代码演示了如何给函数添加文档字符串:

  1. def square(x):
  2. 'Calculates the square of the number x.'
  3. return x * x

可以像下面这样访问文档字符串:

  1. >>> square.__doc__
  2. 'Calculates the square of the number x.'

收集参数

单星号 * (元组)
前面有星号的参数将被放在元组中。
因此星号意味着收集余下的位置参数。如果没有可供收集的参数,params将是一个空元组。

  1. >>> print_params_2('Nothing:')
  2. Nothing:
  3. ()

与赋值时一样,带星号的参数也可放在其他位置(而不是最后),但不同的是,在这种情况下你需要做些额外的工作:使用名称来指定后续参数。单星号不会收集关键字参数。

  1. >>> def in_the_middle(x, *y, z):
  2. ... print(x, y, z)
  3. ...
  4. >>> in_the_middle(1, 2, 3, 4, 5, z=7)
  5. 1 (2, 3, 4, 5) 7

双星号 ** (字典)
要收集关键字参数,可使用两个星号。

  1. >>> def print_params_3(**params):
  2. ... print(params)
  3. ...
  4. >>> print_params_3(x=1, y=2, z=3)
  5. {'z': 3, 'x': 1, 'y': 2}

如你所见,这样得到的是一个字典而不是元组。可结合使用这些技术。

  1. def print_params_4(x, y, z=3, *pospar, **keypar):
  2. print(x, y, z)
  3. print(pospar)
  4. print(keypar)

其效果与预期的相同。

  1. >>> print_params_4(1
? python ?    2021-02-24 14:55:56    1067    0    0

append

方法append用于将一个对象附加到列表末尾。

  1. >>> lst = [1, 2, 3]
  2. >>> lst.append(4)
  3. >>> lst
  4. [1, 2, 3, 4]

append也就地修改列表。这意味着它不会返回修
改后的新列表,而是直接修改旧列表。

  1. # l 指向letterGirls['a'] , 然后 l 后面附加一串‘cc’ , letterGirls['a']的值也被修改,两者指向同一个列表,即原件相同,关联同一个列表
  2. >>> l = letterGirls.setdefault('a', [])
  3. >>> l
  4. ['alice', 'alice', 'aly', 'aa', 'bb']
  5. >>> l.append('cc')
  6. >>> l
  7. ['alice', 'alice', 'aly', 'aa', 'bb', 'cc']
  8. >>> letterGirls
  9. {'a': ['alice', 'alice', 'aly', 'aa', 'bb', 'cc'], 'b': ['bernice', 'bernice'], 'c': ['clarice', 'clarice']}
  10. # 同理,引用同一个列表,其删作一个元素,另一个也修改
  11. >>> b = l
  12. >>> b
  13. ['alice', 'alice', 'aly', 'aa', 'bb', 'cc']
  14. >>> del(b[3])
  15. >>> l
  16. ['alice', 'alice', 'aly', 'bb', 'cc']
  17. >>> b
  18. ['alice', 'alice', 'aly', 'bb', 'cc']

setdefault

方法setdefault有点像get,因为它也获取与指定键相关联的值,但除此之外,setdefault
还在字典不包含指定的键时,在字典中添加指定的键-值对。

  1. >>> d = {}
  2. >>> d.setdefault('name', 'N/A')
  3. 'N/A'
  4. >>> d
  5. {'name': 'N/A'}
  6. >>> d['name'] = 'Gumby'
  7. >>> d.setdefault('name', 'N/A')
  8. 'Gumby'
  9. >>> d
  10. {'name': 'Gumby'}
  11. # 如你所
? shell ? ? python ?    2021-01-22 16:17:53    1581    0    0

Shell seq用法

seq --help

  1. Usage: seq [OPTION]... LAST
  2. or: seq [OPTION]... FIRST LAST
  3. or: seq [OPTION]... FIRST INCREMENT LAST
  4. Print numbers from FIRST to LAST, in steps of INCREMENT.
  5. Mandatory arguments to long options are mandatory for short options too.
  6. -f, --format=FORMAT use printf style floating-point FORMAT
  7. -s, --separator=STRING use STRING to separate numbers (default: \n)
  8. -w, --equal-width equalize width by padding with leading zeroes
  9. --help display this help and exit
  10. --version output version information and exit

注意事项

seq 选项[-s " "][-w] FIRST INCREMENT LAST
注意 选项紧跟seq, 位于序列数字FIRST INCREMENT LAST之前,FIRST INCREMENT LAST放在最后
比如

  1. seq -s " " -w 2 100 1000

常用命令

  • 生成一个1 到 10 的序列 ,不指定分隔符s时,默认是换行符。
  1. root@gua-vm1:/vob# seq 10
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  • 生成一个1 到 10 的序列 ,指定分隔符为空格 ,在seq 后面加上选项 -s " "
  1. root@gua-vm1:/vob# seq -s " " 10
  2. 1 2 3 4 5 6 7 8 9 10
  • 生成一个3 到 10 的序列 ,只指定头尾时,默认递增量为1
  1. r
? python ? ? docker ?    2020-07-14 15:38:22    1171    0    0


Dockerfile 里的 pip install 总是failed .但是直接执行可以成功。
估计是docker build 时默认使用的pip 源有太慢导致

Dockerfile 里涉及的报错语句

  1. RUN pip install networkx

报错如下

  1. Step 9/15 : RUN pip install networkx
  2. ---> Running in 3a3f19067b2f
  3. Collecting networkx
  4. Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed ox/
  5. Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed ox/
  6. Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed ox/
  7. Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutErr
? python ?    2019-01-11 16:22:44    662    0    0

 virtualenv 概述

virtualenv提供了一个独立的python开发环境,用于多个python项目不同环境的隔离。当我们多个项目并行时,并且项目彼此之间需要导入同一模块的不同版本时,virtualenv所提供的虚拟环境就非常有用。

这是一个开源的项目。

源码访问: https://github.com/pypa/virtualenv 

文档参考: https://virtualenv.pypa.io/en/latest

? bugzilla ? ? python ?    2019-01-11 16:22:44    1088    0    0

需求:

1. 根据bug list 导出表格

2. 指定显示固定字段

3.使用bugzilla 自有的导出CSV 格式

 

思路:

1. bugzilla 导出查询结果的功能已有,可以直接在页面点击csv , 通过浏览器直接下载表格。

2. 需求转化为如何生成下载csv 的url 。

3. 取一个url 进行分析 ,抽取其中的 bug list 和固定字段 进行切割,使下载链接模板化。

4. 使用bug list 和固定字段作为参数,对url 模板进行实例化。

5. 其他: 模拟浏览器 ,进行登录,下载 。

6. 扩展: 修改值,提交修改。