博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进阶第六课 Python模块之string
阅读量:7220 次
发布时间:2019-06-29

本文共 4835 字,大约阅读时间需要 16 分钟。

对字符串做格式化操作

>>> 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位随机码。

wD0BLC9ao3hcgkGK9eJfqrBcWh0npqk9KFozij0woNf5OBeNuJPseRXyplhc2suV03fcyfHTmIuFpmYusZOljZuMe4IHy66UYApsefoE2nc47nQ8Mzxiehm6Vt5HqVJUlWuW02HHi7RFehQ9zbxCE9NtugpBQmhT

如果要定制其他长度的随机码,可以吧函数中的参数默认值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 stringimport randomhow_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}]Cart1 * coke = 116 * cake = 124 * fish = 1Total: 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))

 

转载于:https://www.cnblogs.com/tuobeiwoniu/p/8678164.html

你可能感兴趣的文章
Python 深浅拷贝 (Shallow copy and Deep copy in Python)
查看>>
Axure
查看>>
屏幕截取工具
查看>>
C语言第七次作业---要死了----
查看>>
Jquery事件绑定冲突
查看>>
偶现bug如何处理?
查看>>
yum命令简介
查看>>
【Udacity】朴素贝叶斯
查看>>
看漫画,学 Redux
查看>>
Spark Streaming揭秘 Day19 架构设计和运行机制
查看>>
【转载】WinCE OAL中的电源管理函数
查看>>
【iOS】Objective-C简约而不简单的单例模式
查看>>
Java实现扫码二维码登录
查看>>
python之字符串的操作和使用
查看>>
eclipse搭建ssm框架
查看>>
CSS div阴影效果
查看>>
显示所有SAP图标的ABAP代码
查看>>
group by 与 order by 一起使用的时候
查看>>
HTML+CSS
查看>>
链接服务器创建
查看>>