本節內容html
列表、元組操做python
字符串操做linux
字典操做git
集合操做windows
文件操做api
字符編碼與轉碼
服務器
列表是咱們最之後最經常使用的數據類型之一,經過列表能夠對數據實現最方便的存儲、修改等操做app
定義列表less
names
=
[
'Alex'
,
"Tenglan"
,
'Eric'
]
經過下標訪問列表中的元素,下標從0開始計數dom
>>> names[
0
]
'Alex'
>>> names[
2
]
'Eric'
>>> names[
-
1
]
'Eric'
>>> names[
-
2
]
#還能夠倒着取
'Tenglan'
切片:取多個元素
>>> names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"] >>> names[1:4] #取下標1至下標4之間的數字,包括1,不包括4['Tenglan', 'Eric', 'Rain'] >>> names[1:-1] #取下標1至-1的值,不包括-1['Tenglan', 'Eric', 'Rain', 'Tom'] >>> names[0:3] ['Alex', 'Tenglan', 'Eric'] >>> names[:3] #若是是從頭開始取,0能夠忽略,跟上句效果同樣['Alex', 'Tenglan', 'Eric'] >>> names[3:] #若是想取最後一個,必須不能寫-1,只能這麼寫['Rain', 'Tom', 'Amy'] >>> names[3:-1] #這樣-1就不會被包含了['Rain', 'Tom'] >>> names[0::2] #後面的2是表明,每隔一個元素,就取一個['Alex', 'Eric', 'Tom'] >>> names[::2] #和上句效果同樣['Alex', 'Eric', 'Tom']
追加
>>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy'] >>> names.append("我是新來的") >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的']
插入
>>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的'] >>> names.insert(2,"強行從Eric前面插入") >>> names ['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的'] >>> names.insert(5,"從eric後面插入試試新姿式") >>> names ['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的']
修改
>>> names ['Alex', 'Tenglan', '強行從Eric前面插入', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的'] >>> names[2] = "該換人了" >>> names ['Alex', 'Tenglan', '該換人了', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的']
刪除
>>> del names[2] >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', '從eric後面插入試試新姿式', 'Tom', 'Amy', '我是新來的'] >>> del names[4] >>> names ['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新來的'] >>> >>> names.remove("Eric") #刪除指定元素 >>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新來的'] >>> names.pop() #刪除列表最後一個值 '我是新來的' >>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
擴展
>>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy'] >>> b = [1,2,3] >>> names.extend(b) >>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
拷貝
>>> names ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3] >>> name_copy = names.copy() >>> name_copy ['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
統計
>>> names ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] >>> names.count("Amy") 2
排序&翻轉
>>> names ['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3] >>> names.sort() #排序 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: int() < str() #3.0裏不一樣數據類型不能放在一塊兒排序了,擦 >>> names[-3] = '1' >>> names[-2] = '2' >>> names[-1] = '3' >>> names ['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3'] >>> names.sort() >>> names ['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom'] >>> names.reverse() #反轉 >>> names ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
獲取下標
>>> names ['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1'] >>> names.index("Amy") 2 #只返回找到的第一個下標
元組其實跟列表差很少,也是存一組數,只不是它一旦建立,便不能再修改,因此又叫只讀列表
語法
names = ("alex","jack","eric")
它只有2個方法,一個是count,一個是index,完畢。
特性:不可修改
name.capitalize() 首字母大寫 name.casefold() 大寫所有變小寫 name.center(50,"-") 輸出 '---------------------Alex Li----------------------' name.count('lex') 統計 lex出現次數 name.encode() 將字符串編碼成bytes格式 name.endswith("Li") 判斷字符串是否以 Li結尾 "Alex\tLi".expandtabs(10) 輸出'Alex Li', 將\t轉換成多長的空格 name.find('A') 查找A,找到返回其索引, 找不到返回-1 format : >>> msg = "my name is {}, and age is {}" >>> msg.format("alex",22) 'my name is alex, and age is 22' >>> msg = "my name is {1}, and age is {0}" >>> msg.format("alex",22) 'my name is 22, and age is alex' >>> msg = "my name is {name}, and age is {age}" >>> msg.format(age=22,name="ale") 'my name is ale, and age is 22' format_map >>> msg.format_map({'name':'alex','age':22}) 'my name is alex, and age is 22' msg.index('a') 返回a所在字符串的索引 '9aA'.isalnum() True '9'.isdigit() 是否整數 name.isnumeric name.isprintable name.isspace name.istitle name.isupper "|".join(['alex','jack','rain']) 'alex|jack|rain' maketrans >>> intab = "aeiou" #This is the string having actual characters. >>> outtab = "12345" #This is the string having corresponding mapping character >>> trantab = str.maketrans(intab, outtab) >>> >>> str = "this is string example....wow!!!" >>> str.translate(trantab) 'th3s 3s str3ng 2x1mpl2....w4w!!!' msg.partition('is') 輸出 ('my name ', 'is', ' {name}, and age is {age}') >>> "alex li, chinese name is lijie".replace("li","LI",1) 'alex LI, chinese name is lijie' msg.swapcase 大小寫互換 >>> msg.zfill(40) '00000my name is {name}, and age is {age}' >>> n4.ljust(40,"-") 'Hello 2orld-----------------------------' >>> n4.rjust(40,"-") '-----------------------------Hello 2orld' >>> b="ddefdsdff_哈哈" >>> b.isidentifier() #檢測一段字符串能否被看成標誌符,便是否符合變量命名規則 True
字典一種key - value 的數據類型,使用就像咱們上學用的字典,經過筆劃、字母來查對應頁的詳細內容。
語法:
info = { 'stu1101': "TengLan Wu", 'stu1102': "LongZe Luola", 'stu1103': "XiaoZe Maliya", }
字典的特性:
dict是無序的
key必須是惟一的,so 天生去重
增長
>>> info["stu1104"] = "蒼井空" >>> info {'stu1102': 'LongZe Luola', 'stu1104': '蒼井空', 'stu1103': 'XiaoZe Maliya', 'stu1101': 'TengLan Wu'}
修改
>>> info['stu1101'] = "武藤蘭" >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤蘭'}
刪除
>>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1101': '武藤蘭'} >>> info.pop("stu1101") #標準刪除姿式 '武藤蘭' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} >>> del info['stu1103'] #換個姿式刪除 >>> info {'stu1102': 'LongZe Luola'} >>> >>> >>> >>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} #隨機刪除 >>> info.popitem() ('stu1102', 'LongZe Luola') >>> info {'stu1103': 'XiaoZe Maliya'}
查找
>>> info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'} >>> >>> "stu1102" in info #標準用法 True >>> info.get("stu1102") #獲取 'LongZe Luola' >>> info["stu1102"] #同上,可是看下面 'LongZe Luola' >>> info["stu1105"] #若是一個key不存在,就報錯,get不會,不存在只返回None Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'stu1105'
多級字典嵌套及操做
av_catalog = { "歐美":{ "www.youporn.com": ["不少免費的,世界最大的","質量通常"], "www.pornhub.com": ["不少免費的,也很大","質量比yourporn高點"], "letmedothistoyou.com": ["可能是自拍,高質量圖片不少","資源很少,更新慢"], "x-art.com":["質量很高,真的很高","所有收費,屌比請繞過"] }, "日韓":{ "tokyo-hot":["質量怎樣不清楚,我的已經不喜歡日韓範了","據說是收費的"] }, "大陸":{ "1024":["所有免費,真好,好人一輩子平安","服務器在國外,慢"] } } av_catalog["大陸"]["1024"][1] += ",能夠用爬蟲爬下來" print(av_catalog["大陸"]["1024"]) #ouput ['所有免費,真好,好人一輩子平安', '服務器在國外,慢,能夠用爬蟲爬下來']
其它姿式
#values >>> info.values() dict_values(['LongZe Luola', 'XiaoZe Maliya']) #keys >>> info.keys() dict_keys(['stu1102', 'stu1103']) #setdefault >>> info.setdefault("stu1106","Alex") 'Alex' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} >>> info.setdefault("stu1102","龍澤蘿拉") 'LongZe Luola' >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} #update >>> info {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} >>> b = {1:2,3:4, "stu1102":"龍澤蘿拉"} >>> info.update(b) >>> info {'stu1102': '龍澤蘿拉', 1: 2, 3: 4, 'stu1103': 'XiaoZe Maliya', 'stu1106': 'Alex'} #items info.items() dict_items([('stu1102', '龍澤蘿拉'), (1, 2), (3, 4), ('stu1103', 'XiaoZe Maliya'), ('stu1106', 'Alex')]) #經過一個列表生成默認dict,有個沒辦法解釋的坑,少用吧這個 >>> dict.fromkeys([1,2,3],'testd') {1: 'testd', 2: 'testd', 3: 'testd'}
循環dict
#方法1 for key in info: print(key,info[key]) #方法2 for k,v in info.items(): #會先把dict轉成list,數據裏大時莫用 print(k,v)
集合是一個無序的,不重複的數據組合,它的主要做用以下:
去重,把一個列表變成集合,就自動去重了
關係測試,測試兩組數據以前的交集、差集、並集等關係
經常使用操做
s = set([3,5,9,10]) #建立一個數值集合 t = set("Hello") #建立一個惟一字符的集合 a = t | s # t 和 s的並集 b = t & s # t 和 s的交集 c = t – s # 求差集(項在t中,但不在s中) d = t ^ s # 對稱差集(項在t或s中,但不會同時出如今兩者中) 基本操做: t.add('x') # 添加一項 s.update([10,37,42]) # 在s中添加多項 使用remove()能夠刪除一項: t.remove('H') len(s) set 的長度 x in s 測試 x 是不是 s 的成員 x not in s 測試 x 是否不是 s 的成員 s.issubset(t) s <= t 測試是否 s 中的每個元素都在 t 中 s.issuperset(t) s >= t 測試是否 t 中的每個元素都在 s 中 s.union(t) s | t 返回一個新的 set 包含 s 和 t 中的每個元素 s.intersection(t) s & t 返回一個新的 set 包含 s 和 t 中的公共元素 s.difference(t) s - t 返回一個新的 set 包含 s 中有可是 t 中沒有的元素 s.symmetric_difference(t) s ^ t 返回一個新的 set 包含 s 和 t 中不重複的元素 s.copy() 返回 set 「s」的一個淺複製
對文件操做流程
打開文件,獲得文件句柄並賦值給一個變量
經過句柄對文件進行操做
關閉文件
現有文件以下
Somehow, it seems the love I knew was always the most destructive kind 不知爲什麼,我經歷的愛情老是最具毀滅性的的那種 Yesterday when I was young 昨日當我年少輕狂 The taste of life was sweet 生命的滋味是甜的 As rain upon my tongue 就如舌尖上的雨露 I teased at life as if it were a foolish game 我戲弄生命 視其爲愚蠢的遊戲 The way the evening breeze 就如夜晚的微風 May tease the candle flame 逗弄蠟燭的火苗 The thousand dreams I dreamed 我曾千萬次夢見 The splendid things I planned 那些我計劃的絢麗藍圖 I always built to last on weak and shifting sand 但我老是將之建築在易逝的流沙上 I lived by night and shunned the naked light of day 我夜夜笙歌 逃避白晝赤裸的陽光 And only now I see how the time ran away 事到現在我纔看清歲月是如何匆匆流逝 Yesterday when I was young 昨日當我年少輕狂 So many lovely songs were waiting to be sung 有那麼多甜美的曲兒等我歌唱 So many wild pleasures lay in store for me 有那麼多肆意的快樂等我享受 And so much pain my eyes refused to see 還有那麼多痛苦 個人雙眼卻視而不見 I ran so fast that time and youth at last ran out 我飛快地奔走 最終時光與青春消逝殆盡 I never stopped to think what life was all about 我從未停下腳步去思考生命的意義 And every conversation that I can now recall 現在回想起的全部對話 Concerned itself with me and nothing else at all 除了和我相關的 什麼都記不得了 The game of love I played with arrogance and pride 我用自負和傲慢玩着愛情的遊戲 And every flame I lit too quickly, quickly died 全部我點燃的火焰都熄滅得太快 The friends I made all somehow seemed to slip away 全部我交的朋友彷佛都不知不覺地離開了 And only now I'm left alone to end the play, yeah 只剩我一我的在臺上來結束這場鬧劇 Oh, yesterday when I was young 噢 昨日當我年少輕狂 So many, many songs were waiting to be sung 有那麼那麼多甜美的曲兒等我歌唱 So many wild pleasures lay in store for me 有那麼多肆意的快樂等我享受 And so much pain my eyes refused to see 還有那麼多痛苦 個人雙眼卻視而不見 There are so many songs in me that won't be sung 我有太多歌曲永遠不會被唱起 I feel the bitter taste of tears upon my tongue 我嚐到了舌尖淚水的苦澀滋味 The time has come for me to pay for yesterday 終於到了付出代價的時間 爲了昨日 When I was young 當我年少輕狂
基本操做
f = open('lyrics') #打開文件 first_line = f.readline() print('first line:',first_line) #讀一行 print('我是分隔線'.center(50,'-')) data = f.read()# 讀取剩下的全部內容,文件大時不要用 print(data) #打印文件 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
其它語法
def close(self): # real signature unknown; restored from __doc__ """ Close the file. A closed file cannot be used for further I/O operations. close() may be called more than once without error. """ pass def fileno(self, *args, **kwargs): # real signature unknown """ Return the underlying file descriptor (an integer). """ pass def isatty(self, *args, **kwargs): # real signature unknown """ True if the file is connected to a TTY device. """ pass def read(self, size=-1): # known case of _io.FileIO.read """ 注意,不必定能全讀回來 Read at most size bytes, returned as bytes. Only makes one system call, so less data may be returned than requested. In non-blocking mode, returns None if no data is available. Return an empty bytes object at EOF. """ return "" def readable(self, *args, **kwargs): # real signature unknown """ True if file was opened in a read mode. """ pass def readall(self, *args, **kwargs): # real signature unknown """ Read all data from the file, returned as bytes. In non-blocking mode, returns as much as is immediately available, or None if no data is available. Return an empty bytes object at EOF. """ pass def readinto(self): # real signature unknown; restored from __doc__ """ Same as RawIOBase.readinto(). """ pass #不要用,沒人知道它是幹嗎用的 def seek(self, *args, **kwargs): # real signature unknown """ Move to new file position and return the file position. Argument offset is a byte count. Optional argument whence defaults to SEEK_SET or 0 (offset from start of file, offset should be >= 0); other values are SEEK_CUR or 1 (move relative to current position, positive or negative), and SEEK_END or 2 (move relative to end of file, usually negative, although many platforms allow seeking beyond the end of a file). Note that not all file objects are seekable. """ pass def seekable(self, *args, **kwargs): # real signature unknown """ True if file supports random-access. """ pass def tell(self, *args, **kwargs): # real signature unknown """ Current file position. Can raise OSError for non seekable files. """ pass def truncate(self, *args, **kwargs): # real signature unknown """ Truncate the file to at most size bytes and return the truncated size. Size defaults to the current file position, as returned by tell(). The current file position is changed to the value of size. """ pass def writable(self, *args, **kwargs): # real signature unknown """ True if file was opened in a write mode. """ pass def write(self, *args, **kwargs): # real signature unknown """ Write bytes b to file, return number written. Only makes one system call, so not all of the data may be written. The number of bytes actually written is returned. In non-blocking mode, returns None if the write would block. """ pass
with語句
爲了不打開文件後忘記關閉,能夠經過管理上下文,即:
with open('log','r') as f: ...
如此方式,當with代碼塊執行完畢時,內部會自動關閉並釋放文件資源。
在Python 2.7 後,with又支持同時對多個文件的上下文進行管理,即:
with open('log1') as obj1, open('log2') as obj2: pass