进阶第六课 Python模块之string
Posted 驼背蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进阶第六课 Python模块之string相关的知识,希望对你有一定的参考价值。
对字符串做格式化操作
>>> import string >>> dir(string) [\'Formatter\', \'Template\', \'_ChainMap\', \'_TemplateMetaclass\', \'__all__\', \'__builtins__\', \'__cached__\', \'__doc__\', \'__file__\', \'__loader__\', \'__name__\', \'__package__\', \'__spec__\', \'_re\', \'_string\', \'ascii_letters\', \'ascii_lowercase\', \'ascii_uppercase\', \'capwords\', \'digits\', \'hexdigits\', \'octdigits\', \'printable\', \'punctuation\', \'whitespace\']
1、string.capwords()
把字符串中所有单词的首字母均变成大写字母。看例子:
>>> a=\'Tom is a boy and Kate is a girl.\' >>> import string >>> b=string.capwords(a) >>> b \'Tom Is A Boy And Kate Is A Girl.\'
2、string.ascii_letters
>>> string.ascii_letters \'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\'
3、string.ascii_lowercase
26个小写英语字母
>>> string.ascii_lowercase \'abcdefghijklmnopqrstuvwxyz\'
4、string.ascii_uppercase
26个大写英语字母
>>> string.ascii_uppercase \'ABCDEFGHIJKLMNOPQRSTUVWXYZ\'
5、string.digits
>>> string.digits \'0123456789\'
有人会问,0-9和大小写英语字母的用处是什么?网上找到一个特别好的示例:
比如需要随机生成8位码,里面有数字和大小写英语字母。
>>> import random
>>> import string
>>> def suijima(geshu,len=8): a=open(\'suijima.txt\',\'w\') for i in range(geshu): d=\'\' c=string.ascii_letters+string.digits for i in range(8): b=random.choice(c) d=d+b a.write(\'{0}\\n\'.format(d)) a.close() >>> suijima(20)
自己的代码烂。分析一下:
5.1 def开头,没什么说的。函数名suijima,有2个参数:一个是输出随机码的个数,另一个是随机码位数(且这个参数有默认值8,意味着调用这个函数时不需要提供这个参数!)
5.2 open 打开一个文件(后面有讲到,可以看进阶第十八课),命名suijima,‘w’是写模式。
5.3 既然要生成geshu个随机码,自然就要用到for循环,range的参数就是个数。
5.4 命名一个变量d,是空字符串,这就是最后的随机码。
5.5 把大小写英语字母和0-9以字符串的形式赋值给c。意味着c的值是:
>>> c=string.ascii_letters+string.digits >>> c \'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\'
5.6 因为设定了随机码的位数,也就是8位,所以每一位都是从c中随机取值,再来一个for循环,range(8)。
5.7 执行字符串累加。最后等到1个8位随机码。
5.8 把生成的1个8位随机码写入suijima.txt,格式可参考str.format。
5.9 外层循环geshu次,每次生成一个8位随机码,每生成一个就完成一次写入.suijima.txt操作。
5.10 完成后,关闭suijima.txt。
调用函数:
>>> suijima(20)
这时去python.exe所在目录就能看到函数生成的suijima.txt文档,打开可以看到函数生成的20个8位随机码。
wD0BLC9a
o3hcgkGK
9eJfqrBc
Wh0npqk9
KFozij0w
oNf5OBeN
uJPseRXy
plhc2suV
03fcyfHT
mIuFpmYu
sZOljZuM
e4IHy66U
YApsefoE
2nc47nQ8
Mzxiehm6
Vt5HqVJU
lWuW02HH
i7RFehQ9
zbxCE9Nt
ugpBQmhT
如果要定制其他长度的随机码,可以吧函数中的参数默认值8去除,同时在倒数第三行把range(8)改为range(len)即可。
def randomcode(how_many,length): a=open(\'randomcode.txt\',\'w\') for i in range(how_many): ran_code=\'\' b=string.ascii_letters+string.digits for j in range(length): c=random.choice(b) ran_code+=c a.write(\'{0}\\n\'.format(ran_code)) a.close()
只是调用这个函数时,必须要输入2个参数且位置不可调到,或者指定参数名就可以颠倒顺序。
在IDLE中的自定义函数,一旦IDLE关闭这个函数就消失了。可以做成一个自己的模块:
a)在IDLE中安Ctrl+N,打开一个新窗口
b)输入下列代码
c)Ctrl+S保存到默认目录并命名,比如randomcode200
import string import random how_many=int(input("需要多少个随机码:")) #input得到的是字符串,为了在下面的range()使用输入值,需要转换为整型 length=int(input("每个随机码有多少位:")) #同上 a=open(\'randomcode200.txt\',\'w\') for i in range(how_many): b=\'\' c=string.ascii_letters+string.digits for j in range(length): d=random.choice(c) b=b+d a.write(\'{0}\\n\'.format(b)) a.close()
d)回到IDLE,执行:
>>> import randomcode200 需要多少个随机码:10 每个随机码有多少位:50
e)去python.exe所在文件夹就能看到randomcode200.txt这个文件,打开可以看到10个50位的随机码。
6、string.hexdigits
十六进制数的数字
>>> string.hexdigits \'0123456789abcdefABCDEF\'
7、string.octdigits
八进制数的数字
>>> string.octdigits \'01234567\'
8、string.printable
>>> string.printable \'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\\\'()*+,-./:;<=>?@[\\\\]^_`{|}~ \\t\\n\\r\\x0b\\x0c\'
9、string.punctuation
>>> string.punctuation \'!"#$%&\\\'()*+,-./:;<=>?@[\\\\]^_`{|}~\'
10、string.whitespace
>>> string.whitespace \' \\t\\n\\r\\x0b\\x0c\'
2、Template
指定文档模板,把字符串按照指定模板的格式输出。
具体可以看这个链接的讲解:
https://www.cnblogs.com/subic/p/6552752.html
https://www.cnblogs.com/tiecheng/p/6018512.html
Template是string库中的一部分。
2.1Template的作用:
Template是含有占位符($)的字符串。
使用字典把值映射到模板中。
占位符后面跟着的变量名要符合Python变量名的命名规则。
格式:Template("$apple is my favorite $fruit"),当这个模板被调用并被打印时,就能打印出字典中键是‘apple’和\'fruit\'对应的值。
2.2 示例
>>> def super_market(): cart = [] cart.append(dict(item=\'coke\',price=11,qty= 1)) cart.append(dict(item=\'cake\',price=12,qty=6)) cart.append(dict(item=\'fish\',price = 1,qty =4)) t = Template("$qty * $item = $price") total = 0 print(cart) print("Cart") for data in cart: print(t.substitute(data)) total += data["price"] print("Total: %s"%(total,)) >>> super_market() [{\'item\': \'coke\', \'price\': 11, \'qty\': 1}, {\'item\': \'cake\', \'price\': 12, \'qty\': 6}, {\'item\': \'fish\', \'price\': 1, \'qty\': 4}] Cart 1 * coke = 11 6 * cake = 12 4 * fish = 1 Total: 24
f分析一下:
a)自定义函数super_market()。
b)建立空列表对象cart。
c)cart中添加3个字典对象,每个字典对象有3个键:值对儿。
d)新建Template模板t,格式为
Template("$qty * $item = $price"),注意这里的变量名要与上一步中的字典对象的键相同。
e)双引号中就是这个模板的格式,通过:print(模板.substitute(字典))就能打印出键的值。
print(t.substitute(data))
以上是关于进阶第六课 Python模块之string的主要内容,如果未能解决你的问题,请参考以下文章