zoukankan      html  css  js  c++  java
  • Python自动化开发学习的第二周---python基础学习

    1.列表、元组操作

    列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作

    切片:取多个元素

     1 >>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
     2 >>> names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
     3 ['Tenglan', 'Eric', 'Rain']
     4 >>> names[1:-1] #取下标1至-1的值,不包括-1
     5 ['Tenglan', 'Eric', 'Rain', 'Tom']
     6 >>> names[0:3] 
     7 ['Alex', 'Tenglan', 'Eric']
     8 >>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
     9 ['Alex', 'Tenglan', 'Eric']
    10 >>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
    11 ['Rain', 'Tom', 'Amy'] 
    12 >>> names[3:-1] #这样-1就不会被包含了
    13 ['Rain', 'Tom']
    14 >>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
    15 ['Alex', 'Eric', 'Tom'] 
    16 >>> names[::2] #和上句效果一样
    17 ['Alex', 'Eric', 'Tom']
    View Code
     1 names = ["zhangsan","lisi","wangwu","zhaoliu",["libai","lihe","ligui","lishangyin"],"libai"]
     2 
     3 print (names[1])
     4 print (names[0:5:2])
     5 print (names[0:3])              #查看元素
     6 names [1] = "李四"             #修改元素
     7 names.append("libai")          #增加元素
     8 names.insert(2,"dufu")         #插入元素
     9 names.remove("wangwu")
    10 del names[2]                   #删除元素
    11 names.sort()                   #排序
    12 names.pop(2)                   #删除特定元素,括号内不标注表示最后一个
    13 names.reverse()                #反转
    14 names.clear()                  #清空列表
    15 print (names.index("zhangsan")) #查看元素第一次出现的下标
    16 print (len(names))             #列表的长度
    17 print (names.count("libai")) #统计元素出现的次数
    18 
    19 name2= [1,2,3,4]
    20 names.extend(name2)            #扩展元素
    View Code

    元组

    元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

    它只有2个方法,一个是count,一个是index,完毕。

    2.字符串操作

    特性:不可修改 

     1 name.capitalize()  首字母大写
     2 name.casefold()   大写全部变小写
     3 name.center(50,"-")  输出 '---------------------Alex Li----------------------'
     4 name.count('lex') 统计 lex出现次数
     5 name.encode()  将字符串编码成bytes格式
     6 name.endswith("Li")  判断字符串是否以 Li结尾
     7  "Alex	Li".expandtabs(10) 输出'Alex      Li', 将	转换成多长的空格 
     8  name.find('A')  查找A,找到返回其索引, 找不到返回-1 
     9 
    10 format :
    11     >>> msg = "my name is {}, and age is {}"
    12     >>> msg.format("alex",22)
    13     'my name is alex, and age is 22'
    14     >>> msg = "my name is {1}, and age is {0}"
    15     >>> msg.format("alex",22)
    16     'my name is 22, and age is alex'
    17     >>> msg = "my name is {name}, and age is {age}"
    18     >>> msg.format(age=22,name="ale")
    19     'my name is ale, and age is 22'
    20 format_map
    21     >>> msg.format_map({'name':'alex','age':22})
    22     'my name is alex, and age is 22'
    23 
    24 
    25 msg.index('a')  返回a所在字符串的索引
    26 '9aA'.isalnum()   True
    27 
    28 '9'.isdigit() 是否整数
    29 name.isnumeric  
    30 name.isprintable
    31 name.isspace
    32 name.istitle
    33 name.isupper
    34  "|".join(['alex','jack','rain'])
    35 'alex|jack|rain'
    36 
    37 
    38 maketrans
    39     >>> intab = "aeiou"  #This is the string having actual characters. 
    40     >>> outtab = "12345" #This is the string having corresponding mapping character
    41     >>> trantab = str.maketrans(intab, outtab)
    42     >>> 
    43     >>> str = "this is string example....wow!!!"
    44     >>> str.translate(trantab)
    45     'th3s 3s str3ng 2x1mpl2....w4w!!!'
    46 
    47  msg.partition('is')   输出 ('my name ', 'is', ' {name}, and age is {age}') 
    48 
    49  >>> "alex li, chinese name is lijie".replace("li","LI",1)
    50      'alex LI, chinese name is lijie'
    51 
    52  msg.swapcase 大小写互换
    53 
    54 
    55  >>> msg.zfill(40)
    56 '00000my name is {name}, and age is {age}'
    57 
    58 
    59 
    60 >>> n4.ljust(40,"-")
    61 'Hello 2orld-----------------------------'
    62 >>> n4.rjust(40,"-")
    63 '-----------------------------Hello 2orld'
    64 
    65 
    66 >>> b="ddefdsdff_哈哈" 
    67 >>> b.isidentifier() #检测一段字符串可否被当作标志符,即是否符合变量命名规则
    68 True
    View Code

     1、去空格及特殊符号

    s.strip().lstrip().rstrip(',')

    2、复制字符串

    1 #strcpy(sStr1,sStr2)
    2 sStr1 = 'strcpy'
    3 sStr2 = sStr1
    4 sStr1 = 'strcpy2'
    5 print sStr2

    3、连接字符串

    1 #strcat(sStr1,sStr2)
    2 sStr1 = 'strcat'
    3 sStr2 = 'append'
    4 sStr1 += sStr2
    5 print sStr1

    4、查找字符

    1 #strchr(sStr1,sStr2)
    2 # < 0 为未找到
    3 sStr1 = 'strchr'
    4 sStr2 = 's'
    5 nPos = sStr1.index(sStr2)
    6 print nPos

    5、比较字符串

    1 #strcmp(sStr1,sStr2)
    2 sStr1 = 'strchr'
    3 sStr2 = 'strch'
    4 print cmp(sStr1,sStr2)

    6、扫描字符串是否包含指定的字符

    1 #strspn(sStr1,sStr2)
    2 sStr1 = '12345678'
    3 sStr2 = '456'
    4 #sStr1 and chars both in sStr1 and sStr2
    5 print len(sStr1 and sStr2)

    7、字符串长度

    1 #strlen(sStr1)
    2 sStr1 = 'strlen'
    3 print len(sStr1)

    8、将字符串中的大小写转换

    S.lower() #小写 
    S.upper() #大写 
    S.swapcase() #大小写互换 
    S.capitalize() #首字母大写 
    String.capwords(S) #这是模块中的方法。它把S用split()函数分开,然后用capitalize()把首字母变成大写,最后用join()合并到一起 
    #实例:
    #strlwr(sStr1)
    sStr1 = 'JCstrlwr'
    sStr1 = sStr1.upper()
    #sStr1 = sStr1.lower()
    print sStr1
    

    9、追加指定长度的字符串

    1 #strncat(sStr1,sStr2,n)
    2 sStr1 = '12345'
    3 sStr2 = 'abcdef'
    4 n = 3
    5 sStr1 += sStr2[0:n]
    6 print sStr1

    10、字符串指定长度比较

    1 #strncmp(sStr1,sStr2,n)
    2 sStr1 = '12345'
    3 sStr2 = '123bc'
    4 n = 3
    5 print cmp(sStr1[0:n],sStr2[0:n])

    11、复制指定长度的字符

    1 #strncpy(sStr1,sStr2,n)
    2 sStr1 = ''
    3 sStr2 = '12345'
    4 n = 3
    5 sStr1 = sStr2[0:n]
    6 print sStr1

    12、将字符串前n个字符替换为指定的字符

    1 #strnset(sStr1,ch,n)
    2 sStr1 = '12345'
    3 ch = 'r'
    4 n = 3
    5 sStr1 = n * ch + sStr1[3:]
    6 print sStr1

    13、扫描字符串

    1 #strpbrk(sStr1,sStr2)
    2 sStr1 = 'cekjgdklab'
    3 sStr2 = 'gka'
    4 nPos = -1
    5 for c in sStr1:
    6     if c in sStr2:
    7         nPos = sStr1.index(c)
    8         break
    9 print nPos

    14、翻转字符串

    1 #strrev(sStr1)
    2 sStr1 = 'abcdefg'
    3 sStr1 = sStr1[::-1]
    4 print sStr1

    15、查找字符串

    1 #strstr(sStr1,sStr2)
    2 sStr1 = 'abcdefg'
    3 sStr2 = 'cde'
    4 print sStr1.find(sStr2)

    16、分割字符串

    1 #strtok(sStr1,sStr2)
    2 sStr1 = 'ab,cde,fgh,ijk'
    3 sStr2 = ','
    4 sStr1 = sStr1[sStr1.find(sStr2) + 1:]
    5 print sStr1
    6 #或者
    7 s = 'ab,cde,fgh,ijk'
    8 print(s.split(','))

    17、连接字符串

     
    1 delimiter = ','
    2 mylist = ['Brazil', 'Russia', 'India', 'China']
    3 print delimiter.join(mylist)

    18、PHP 中 addslashes 的实现

    1 def addslashes(s):
    2     d = {'"':'\"', "'":"\'", "":"\", "\":"\\"}
    3     return ''.join(d.get(c, c) for c in s)
    4 
    5 s = "John 'Johny' Doe (a.k.a. "Super Joe")\"
    6 print s
    7 print addslashes(s)

    19、只显示字母与数字

    1 def OnlyCharNum(s,oth=''):
    2     s2 = s.lower();
    3     fomart = 'abcdefghijklmnopqrstuvwxyz0123456789'
    4     for c in s2:
    5         if not c in fomart:
    6             s = s.replace(c,'');
    7     return s;
    8 
    9 print(OnlyStr("a000 aa-b"))

    20、截取字符串

     1 str = '0123456789′
     2 print str[0:3] #截取第一位到第三位的字符
     3 print str[:] #截取字符串的全部字符
     4 print str[6:] #截取第七个字符到结尾
     5 print str[:-3] #截取从头开始到倒数第三个字符之前
     6 print str[2] #截取第三个字符
     7 print str[-1] #截取倒数第一个字符
     8 print str[::-1] #创造一个与原字符串顺序相反的字符串
     9 print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符
    10 print str[-3:] #截取倒数第三位到结尾
    11 print str[:-5:-3] #逆序截取,具体啥意思没搞明白?

    21、字符串在输出时的对齐

    1 S.ljust(width,[fillchar]) 
    2 #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格。 
    3 S.rjust(width,[fillchar]) #右对齐 
    4 S.center(width, [fillchar]) #中间对齐 
    5 S.zfill(width) #把S变成width长,并在右对齐,不足部分用0补足

    22、字符串中的搜索和替换

     1 S.find(substr, [start, [end]]) 
     2 #返回S中出现substr的第一个字母的标号,如果S中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索 
     3 S.index(substr, [start, [end]]) 
     4 #与find()相同,只是在S中没有substr时,会返回一个运行时错误 
     5 S.rfind(substr, [start, [end]]) 
     6 #返回S中最后出现的substr的第一个字母的标号,如果S中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号 
     7 S.rindex(substr, [start, [end]]) 
     8 S.count(substr, [start, [end]]) #计算substr在S中出现的次数 
     9 S.replace(oldstr, newstr, [count]) 
    10 #把S中的oldstar替换为newstr,count为替换次数。这是替换的通用形式,还有一些函数进行特殊字符的替换 
    11 S.strip([chars]) 
    12 #把S中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None 
    13 S.lstrip([chars]) 
    14 S.rstrip([chars]) 
    15 S.expandtabs([tabsize]) 
    16 #把S中的tab字符替换没空格,每个tab替换为tabsize个空格,默认是8个

    23、字符串的分割和组合

     
    1 S.split([sep, [maxsplit]]) 
    2 #以sep为分隔符,把S分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符 
    3 S.rsplit([sep, [maxsplit]]) 
    4 S.splitlines([keepends]) 
    5 #把S按照行分割符分为一个list,keepends是一个bool值,如果为真每行后而会保留行分割符。 
    6 S.join(seq) #把seq代表的序列──字符串序列,用S连接起来

    24、字符串的mapping,这一功能包含两个函数

    1 String.maketrans(from, to) 
    2 #返回一个256个字符组成的翻译表,其中from中的字符被一一对应地转换成to,所以from和to必须是等长的。 
    3 S.translate(table[,deletechars]) 
    4 # 使用上面的函数产后的翻译表,把S进行翻译,并把deletechars中有的字符删掉。需要注意的是,如果S为unicode字符串,那么就不支持 deletechars参数,可以使用把某个字符翻译为None的方式实现相同的功能。此外还可以使用codecs模块的功能来创建更加功能强大的翻译表。 

    25、字符串还有一对编码和解码的函数

    1 S.encode([encoding,[errors]]) 
    2 # 其中encoding可以有多种值,比如gb2312 gbk gb18030 bz2 zlib big5 bzse64等都支持。errors默认值为"strict",意思是UnicodeError。可能的值还有'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 和所有的通过codecs.register_error注册的值。这一部分内容涉及codecs模块,不是特明白 
    3 S.decode([encoding,[errors]])

    26、字符串的测试、判断函数,这一类函数在string模块中没有,这些函数返回的都是bool值

     1 S.startswith(prefix[,start[,end]]) 
     2 #是否以prefix开头 
     3 S.endswith(suffix[,start[,end]]) 
     4 #以suffix结尾 
     5 S.isalnum() 
     6 #是否全是字母和数字,并至少有一个字符 
     7 S.isalpha() #是否全是字母,并至少有一个字符 
     8 S.isdigit() #是否全是数字,并至少有一个字符 
     9 S.isspace() #是否全是空白字符,并至少有一个字符 
    10 S.islower() #S中的字母是否全是小写 
    11 S.isupper() #S中的字母是否便是大写 
    12 S.istitle() #S是否是首字母大写的

    27、字符串类型转换函数,这几个函数只在string模块中有

    1 string.atoi(s[,base]) 
    2 #base默认为10,如果为0,那么s就可以是012或0x23这种形式的字符串,如果是16那么s就只能是0x23或0X12这种形式的字符串 
    3 string.atol(s[,base]) #转成long 
    4 string.atof(s[,base]) #转成float

     这里再强调一次,字符串对象是不可改变的,也就是说在python创建一个字符串后,你不能把这个字符中的某一部分改变。任何上面的函数改变了字符串后,都会返回一个新的字符串,原字串并没有变。其实这也是有变通的办法的,可以用S=list(S)这个函数把S变为由单个字符为成员的list,这样的话就可以使用S[3]='a'的方式改变值,然后再使用S=" ".join(S)还原成字符串

      

    3.字典操作

    字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。

    字典的特性:

    • dict是无序的
    • key必须是唯一的,so 天生去重
     1 info = {
     2     "stu1101": "zhangsan",
     3     "stu1102": "lisi",
     4     "stu1103": "wangwu",
     5 }
     6 
     7 info["stu1104"]="zhaoliu"  #增加
     8 
     9 info["stu1101"]="ZHANGSAN" #修改
    10 
    11 info.pop("stu1101")
    12 del info["stu1101"]#删除
    13 info.popitem()#随机删除
    14 
    15 "stu1101" in info
    16 info.get("stu1101")
    17 info["stu1101"]      #查找

    4.集合操作

    集合是一个无序的,不重复的数据组合,它的主要作用如下:

    • 去重,把一个列表变成集合,就自动去重了
    • 关系测试,测试两组数据之前的交集、差集、并集等关系

    常用操作

     1 s = set([3,5,9,10])      #创建一个数值集合  
     2   
     3 t = set("Hello")         #创建一个唯一字符的集合  
     4 
     5 
     6 a = t | s          # t 和 s的并集  
     7   
     8 b = t & s          # t 和 s的交集  
     9   
    10 c = t – s          # 求差集(项在t中,但不在s中)  
    11   
    12 d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
    13   
    14    
    15   
    16 基本操作:  
    17   
    18 t.add('x')            # 添加一项  
    19   
    20 s.update([10,37,42])  # 在s中添加多项  
    21   
    22    
    23   
    24 使用remove()可以删除一项:  
    25   
    26 t.remove('H')  
    27   
    28   
    29 len(s)  
    30 set 的长度  
    31   
    32 x in s  
    33 测试 x 是否是 s 的成员  
    34   
    35 x not in s  
    36 测试 x 是否不是 s 的成员  
    37   
    38 s.issubset(t)  
    39 s <= t  
    40 测试是否 s 中的每一个元素都在 t 中  
    41   
    42 s.issuperset(t)  
    43 s >= t  
    44 测试是否 t 中的每一个元素都在 s 中  
    45   
    46 s.union(t)  
    47 s | t  
    48 返回一个新的 set 包含 s 和 t 中的每一个元素  
    49   
    50 s.intersection(t)  
    51 s & t  
    52 返回一个新的 set 包含 s 和 t 中的公共元素  
    53   
    54 s.difference(t)  
    55 s - t  
    56 返回一个新的 set 包含 s 中有但是 t 中没有的元素  
    57   
    58 s.symmetric_difference(t)  
    59 s ^ t  
    60 返回一个新的 set 包含 s 和 t 中不重复的元素  
    61   
    62 s.copy()  
    63 返回 set “s”的一个浅复制
    View Code

    5.文件操作

    对文件操作流程

    1. 打开文件,得到文件句柄并赋值给一个变量
    2. 通过句柄对文件进行操作
    3. 关闭文件 

    打开文件的模式有:

    • r,只读模式(默认)。
    • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
    • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

    "+" 表示可以同时读写某个文件

    • r+,可读写文件。【可读;可写;可追加】
    • w+,写读
    • a+,同a

    "U"表示在读取时,可以将 自动转换成 (与 r 或 r+ 模式同使用)

    • rU
    • r+U

    "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

    • rb
    • wb
    • ab

     fp= open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件

    fp.read([size])                     #size为读取的长度,以byte为单位

    fp.readline([size])                 #读一行,如果定义了size,有可能返回的只是一行的一部分

    fp.readlines([size])                #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

    fp.write(str)                      #把str写到文件中,write()并不会在str后加上一个换行符

    fp.writelines(seq)            #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

    fp.close()                        #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError

    fp.flush()                                      #把缓冲区的内容写入硬盘

    fp.fileno()                                      #返回一个长整型的”文件标签“

    fp.isatty()                                      #文件是否是一个终端设备文件(unix系统中的)

    fp.tell()                                         #返回文件操作标记的当前位置,以文件的开头为原点

    fp.next()                                       #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

    fp.seek(offset[,whence])              #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

    fp.truncate([size])                       #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

    with语句

    为了避免打开文件后忘记关闭,可以通过管理上下文,即:

    with open('log','r') as f:

    如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。

    在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

    1 with open('log1') as obj1, open('log2') as obj2:
    2     pass

    6.字符编码与转码

    详细文章:

    http://www.cnblogs.com/yuanchenqi/articles/5956943.html

    http://www.diveintopython3.net/strings.html

    需知:

    1.在python2默认编码是ASCII, python3里默认是unicode

    2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

    3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

  • 相关阅读:
    各大代码托管服务器的分析比较
    《构建之法》读后
    【转】简单的程序诠释C++ STL算法系列之十五:swap
    【转】error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
    C++大会感悟
    一次DDOS攻击引起的安全漫谈
    为npm设置代理,解决网络问题
    Rust 中的类型转换
    Rust 智能指针(二)
    软件设计原则
  • 原文地址:https://www.cnblogs.com/garrett0220/p/6668993.html
Copyright © 2011-2022 走看看