3.Python基礎:day2

1)列表:html

列表是咱們最之後最經常使用的數據類型之一,經過列表能夠對數據實現最方便的存儲、修改等操做python

經過下標訪問列表中的元素,下標從到右以0開始計數linux

 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']
切片
1 >>> names
2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
3 >>> names.append("我是新來的")
4 >>> names
5 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']
追加
1 >>> names
2 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']
3 >>> names.insert(2,"強行從Eric前面插入")
4 >>> names
5 ['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']
6 
7 >>> names.insert(5,"從eric後面插入試試新姿式")
8 >>> names
9 ['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的']
插入
1 >>> names
2 ['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的']
3 >>> names[2] = "該換人了"
4 >>> names
5 ['Alex', 'Tenglan', '該換人了', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的']
修改
 1 >>> del names[2] 
 2 >>> names
 3 ['Alex', 'Tenglan', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的']
 4 >>> del names[4]
 5 >>> names
 6 ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']
 7 >>> 
 8 >>> names.remove("Eric") #刪除指定元素
 9 >>> names
10 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新來的']
11 >>> names.pop() #刪除列表最後一個值 
12 '我是新來的'
13 >>> names
14 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
刪除
1 >>> names
2 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
3 >>> b = [1,2,3]
4 >>> names.extend(b)
5 >>> names
6 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
擴展
1 >>> names
2 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
3 
4 >>> name_copy = names.copy()
5 >>> name_copy
6 ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
拷貝
1 >>> names
2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
3 >>> names.count("Amy")
4 2
統計
 1 >>> names
 2 ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
 3 >>> names.sort() #排序
 4 Traceback (most recent call last):
 5   File "<stdin>", line 1, in <module>
 6 TypeError: unorderable types: int() < str()   #3.0裏不一樣數據類型不能放在一塊兒排序了,擦
 7 >>> names[-3] = '1'
 8 >>> names[-2] = '2'
 9 >>> names[-1] = '3'
10 >>> names
11 ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3']
12 >>> names.sort()
13 >>> names
14 ['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom']
排序
1 >>> names.reverse() #反轉
2 >>> names
3 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
反轉
1 >>> names
2 ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
3 >>> names.index("Amy")
4 2 #只返回找到的第一個下標
獲取下標

2)元組:git

元組其實跟列表差很少,也是存一組數,只不是它一旦建立,便不能再修改,因此又叫只讀列表windows

定義:api

1 names = ("alex","jack","eric")

元組只有2個方法,一個是count,一個是index數組

3)字符串(不可修改)操做:服務器

 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\tLi".expandtabs(10) 輸出'Alex      Li', 將\t轉換成多長的空格 
 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

4)字典:app

字典一種key - value 的數據類型,使用就像咱們上學用的字典,經過筆劃、字母來查對應頁的詳細內容。less

1 info = {
2     'stu1101': "TengLan Wu",
3     'stu1102': "LongZe Luola",
4     'stu1103': "XiaoZe Maliya",
5 }
語法

字典的特性:

  • 無序
  • 去重(key必須是惟一的)
1 >>> info["stu1104"] = "蒼井空"
2 >>> info
3 {'stu1102': 'LongZe Luola', 'stu1104': '蒼井空', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
增長
1 >>> info['stu1101'] = "武藤蘭"
2 >>> info
3 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤蘭'}
修改
 1 >>> info
 2 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤蘭'}
 3 >>> info.pop("stu1101") #標準刪除姿式
 4 '武藤蘭'
 5 >>> info
 6 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
 7 >>> del info['stu1103'] #換個姿式刪除
 8 >>> info
 9 {'stu1102': 'LongZe Luola'}
10 >>> 
11 >>> 
12 >>> 
13 >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
14 >>> info
15 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} #隨機刪除
16 >>> info.popitem()
17 ('stu1102', 'LongZe Luola')
18 >>> info
19 {'stu1103': 'XiaoZe Maliya'}
刪除
 1 >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
 2 >>> 
 3 >>> "stu1102" in info #標準用法
 4 True
 5 >>> info.get("stu1102")  #獲取
 6 'LongZe Luola'
 7 >>> info["stu1102"] #同上,可是看下面
 8 'LongZe Luola'
 9 >>> info["stu1105"]  #若是一個key不存在,就報錯,get不會,不存在只返回None
10 Traceback (most recent call last):
11   File "<stdin>", line 1, in <module>
12 KeyError: 'stu1105'
查找
 1 av_catalog = {
 2     "歐美":{
 3         "www.youporn.com": ["不少免費的,世界最大的","質量通常"],
 4         "www.pornhub.com": ["不少免費的,也很大","質量比yourporn高點"],
 5         "letmedothistoyou.com": ["可能是自拍,高質量圖片不少","資源很少,更新慢"],
 6         "x-art.com":["質量很高,真的很高","所有收費,屌比請繞過"]
 7     },
 8     "日韓":{
 9         "tokyo-hot":["質量怎樣不清楚,我的已經不喜歡日韓範了","據說是收費的"]
10     },
11     "大陸":{
12         "1024":["所有免費,真好,好人一輩子平安","服務器在國外,慢"]
13     }
14 }
15 
16 av_catalog["大陸"]["1024"][1] += ",能夠用爬蟲爬下來"
17 print(av_catalog["大陸"]["1024"])
18 #ouput 
19 ['所有免費,真好,好人一輩子平安', '服務器在國外,慢,能夠用爬蟲爬下來']
多級字典嵌套及操做
1 #方法1
2 for key in info:
3     print(key,info[key])
4 
5 #方法2
6 for k,v in info.items(): #會先把dict轉成list,數據裏大時莫用
7     print(k,v)
循環字典
 1 #values 獲取字典的值
 2 >>> info.values()
 3 dict_values(['LongZe Luola', 'XiaoZe Maliya'])
 4 
 5 #keys 獲取字典的鍵
 6 >>> info.keys()
 7 dict_keys(['stu1102', 'stu1103'])
 8 
 9 
10 #setdefault 若是鍵不存在於字典中,將會添加鍵並將值設爲默認值
11 >>> info.setdefault("stu1106","Alex")
12 'Alex'
13 >>> info
14 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
15 >>> info.setdefault("stu1102","龍澤蘿拉")
16 'LongZe Luola'
17 >>> info
18 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
19 
20 
21 #update 更新
22 >>> info
23 {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
24 >>> b = {1:2,3:4, "stu1102":"龍澤蘿拉"}
25 >>> info.update(b)
26 >>> info
27 {'stu1102': '龍澤蘿拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'}
28 
29 #items 以列表返回可遍歷的(鍵, 值) 元組數組
30 info.items()
31 dict_items([('stu1102', '龍澤蘿拉'), (1, 2), (3, 4), ('stu1103', 'XiaoZe Maliya'), ('stu1106', 'Alex')])
32 
33 
34 #經過一個列表生成默認dict,有個沒辦法解釋的坑,少用吧這個
35 >>> dict.fromkeys([1,2,3],'testd')
36 {1: 'testd', 2: 'testd', 3: 'testd'}
其餘字典知識

5)集合:

集合是一個無序的,不重複的數據組合,主要做用以下:

  • 去重:把一個列表變成集合,就自動去重了
  • 關係測試:測試兩組數據以前的交集、差集、並集等關係
 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」的一個淺複製
集合經常使用操做

 6)文件操做:

對文件操做流程

  1. 打開文件,獲得文件句柄並賦值給一個變量
  2. 經過句柄對文件進行操做
  3. 關閉文件
1 f = open('lyrics') #打開文件
2 first_line = f.readline()
3 print('first line:',first_line) #讀一行
4 print('我是分隔線'.center(50,'-'))
5 data = f.read()# 讀取剩下的全部內容,文件大時不要用
6 print(data) #打印文件
7  
8 f.close() #關閉文件
基本操做

打開文件的模式有:

  • r,只讀模式(默認)。
  • w,只寫模式。【不可讀;不存在則建立;存在則刪除內容;】
  • a,追加模式。【可讀;   不存在則建立;存在則只追加內容;】

"+" 表示能夠同時讀寫某個文件

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

"U"表示在讀取時,能夠將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,linux可忽略,windows處理二進制文件時需標註)

  • rb
  • wb
  • ab
 1 def close(self): # real signature unknown; restored from __doc__
 2         """
 3         Close the file.
 4         
 5         A closed file cannot be used for further I/O operations.  close() may be
 6         called more than once without error.
 7         """
 8         pass
 9 
10     def fileno(self, *args, **kwargs): # real signature unknown
11         """ Return the underlying file descriptor (an integer). """
12         pass
13 
14     def isatty(self, *args, **kwargs): # real signature unknown
15         """ True if the file is connected to a TTY device. """
16         pass
17 
18     def read(self, size=-1): # known case of _io.FileIO.read
19         """
20         注意,不必定能全讀回來
21         Read at most size bytes, returned as bytes.
22         
23         Only makes one system call, so less data may be returned than requested.
24         In non-blocking mode, returns None if no data is available.
25         Return an empty bytes object at EOF.
26         """
27         return ""
28 
29     def readable(self, *args, **kwargs): # real signature unknown
30         """ True if file was opened in a read mode. """
31         pass
32 
33     def readall(self, *args, **kwargs): # real signature unknown
34         """
35         Read all data from the file, returned as bytes.
36         
37         In non-blocking mode, returns as much as is immediately available,
38         or None if no data is available.  Return an empty bytes object at EOF.
39         """
40         pass
41 
42     def readinto(self): # real signature unknown; restored from __doc__
43         """ Same as RawIOBase.readinto(). """
44         pass #不要用,沒人知道它是幹嗎用的
45 
46     def seek(self, *args, **kwargs): # real signature unknown
47         """
48         Move to new file position and return the file position.
49         
50         Argument offset is a byte count.  Optional argument whence defaults to
51         SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values
52         are SEEK_CUR or 1 (move relative to current position, positive or negative),
53         and SEEK_END or 2 (move relative to end of file, usually negative, although
54         many platforms allow seeking beyond the end of a file).
55         
56         Note that not all file objects are seekable.
57         """
58         pass
59 
60     def seekable(self, *args, **kwargs): # real signature unknown
61         """ True if file supports random-access. """
62         pass
63 
64     def tell(self, *args, **kwargs): # real signature unknown
65         """
66         Current file position.
67         
68         Can raise OSError for non seekable files.
69         """
70         pass
71 
72     def truncate(self, *args, **kwargs): # real signature unknown
73         """
74         Truncate the file to at most size bytes and return the truncated size.
75         
76         Size defaults to the current file position, as returned by tell().
77         The current file position is changed to the value of size.
78         """
79         pass
80 
81     def writable(self, *args, **kwargs): # real signature unknown
82         """ True if file was opened in a write mode. """
83         pass
84 
85     def write(self, *args, **kwargs): # real signature unknown
86         """
87         Write bytes b to file, return number written.
88         
89         Only makes one system call, so not all of the data may be written.
90         The number of bytes actually written is returned.  In non-blocking mode,
91         returns None if the write would block.
92         """
93         pass
其餘語法

with語句

1 with open('log','r') as f:
2      
3     ...
避免打開文件後忘記關閉,能夠經過管理上下文

如此方式,當with代碼塊執行完畢時,內部會自動關閉並釋放文件資源

Python 2.7 後,with又支持同時對多個文件的上下文進行管理,即:

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

7)字符編碼與轉碼:

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

 1 #-*-coding:utf-8-*-
 2 __author__ = 'Alex Li'
 3 
 4 import sys
 5 print(sys.getdefaultencoding())
 6 
 7 
 8 msg = "我愛北京天安門"
 9 msg_gb2312 = msg.decode("utf-8").encode("gb2312")
10 gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk")
11 
12 print(msg)
13 print(msg_gb2312)
14 print(gb2312_to_gbk)
15 
16 in python2
In Python 2
 1 #-*-coding:gb2312 -*-   #這個也能夠去掉
 2 __author__ = 'Alex Li'
 3 
 4 import sys
 5 print(sys.getdefaultencoding())
 6 
 7 
 8 msg = "我愛北京天安門"
 9 #msg_gb2312 = msg.decode("utf-8").encode("gb2312")
10 msg_gb2312 = msg.encode("gb2312") #默認就是unicode,不用再decode,喜大普奔
11 gb2312_to_unicode = msg_gb2312.decode("gb2312")
12 gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")
13 
14 print(msg)
15 print(msg_gb2312)
16 print(gb2312_to_unicode)
17 print(gb2312_to_utf8)
18 
19 in python3
In Python 3

 

「編碼與解碼」詳細文章:

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

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

 +++++++++++++++++++++++++++++++++++++++++++++++++++

以上內容參考:http://www.cnblogs.com/alex3714/articles/5717620.html

若有侵權,請聯繫刪除!

相關文章
相關標籤/搜索