进阶第六课 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的主要内容,如果未能解决你的问题,请参考以下文章

产品经理进阶第六课,Axure实操之推拉效果的实现

产品经理进阶第六课,Axure实操之推拉效果的实现

python第六课知识点总结

Python 基础 2022 最新第六课 Numpy

Python 基础 2022 最新第六课 Numpy

Python 基础 2022 最新第六课 Numpy