1 names = "ZhangYang GuYun XiangPeng XuLiangchen" 2 names = ["ZhangYang", "GuYun", "XiangPeng", "ChengRongHua","XuLiangchen"] 3 names.append("LeiHaiDong") #在列表最後追加一個元素 4 names.insert(1,"ChengRongHua")#在列表中插入一個元素,insert後第一個參數是要插入的下表值,第二個參數是要插入的元素 5 names.insert(3,"XinZhiYu") 6 #names[2] = "XieDi" #替換列表下標爲2的元素爲XieDi 7 print(names) 8 #print(names[0],names[2]) #取列表值,第一個從0開始 9 #print(names[1:3])#切片 10 #print(names[-1])#切片取最後一個值 11 #print(names[-2:])#切片取最後兩個值 12 #print(names[:3])#切片取前三個值 13 # delete 14 #names.remove("ChengRongHua") #按照查找元素刪除 15 #del names[1] #刪除下標爲1的元素 16 #names.pop() #默認刪除列表最後一個元素 17 #names.pop(1)#刪除下標爲1的元素與 del names[1] 效果相等 18 #print(names.index("GuYun")) #查找列表中GuYun所在的位置 19 #print(names[names.index("GuYun")])#查找列表中GuYun所在的位置,並將查找位置當列表值的下標 20 #print(names.count("ChengRongHua"))#統計列表中元素是ChengRongHua的數量 21 #names.clear()# 22 #names.reverse()#列表反轉,最後一個元素與第一個元素對調,後續依次類推 23 #names.sort()#列表排序,排序規則按照ASCII排序 24 names2 = ["LiJian","LiLei"] 25 names.extend(names2) #將names2列表合併到names最後面 26 del names2 #刪除names2整個列表
#列表copy 淺copy 和深copy 列表外層被完整複製,當原列表發生變化後,新複製的列表不變 import copy names = ["ZhangYang", "GuYun", "XiangPeng", "ChengRongHua","XuLiangchen"] names.insert(3,"XinZhiYu") #print(names) names2 = names.copy() print(names,'\n',names2) names[3] = "向鵬" print("----------------") print(names,'\n',names2) ''' 執行結果 E:\software\pystudy\venv\Scripts\python.exe E:/software/pystudy/day2/names.py ['ZhangYang', 'GuYun', 'XiangPeng', 'XinZhiYu', 'ChengRongHua', 'XuLiangchen'] ['ZhangYang', 'GuYun', 'XiangPeng', 'XinZhiYu', 'ChengRongHua', 'XuLiangchen'] ---------------- ['ZhangYang', 'GuYun', 'XiangPeng', '向鵬', 'ChengRongHua', 'XuLiangchen'] ['ZhangYang', 'GuYun', 'XiangPeng', 'XinZhiYu', 'ChengRongHua', 'XuLiangchen'] Process finished with exit code 0 '''
#列表copy 淺copy 和深copy 列表外層被完整複製,但被複制的列表中的子列表發生改變時,新列表也會同時發生變化,這是因爲子列表在內存中保存機制致使, #子列表打印時調用的是內存地址,並非子列表自己元素值。
#當執行names.copy時,實際上子列表是copy的內存地址 import copy names = ["ZhangYang", "GuYun", "XiangPeng", ["alex", "Jack"], "ChengRongHua","XuLiangchen"] #print(names) names2 = names.copy() print(names, '\n', names2) names[2] = "向鵬" names[3][0] = "ALEX" print("----------------") print(names, '\n', names2) ''' E:\software\pystudy\venv\Scripts\python.exe E:/software/pystudy/day2/names.py ['ZhangYang', 'GuYun', 'XiangPeng', ['alex', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ['ZhangYang', 'GuYun', 'XiangPeng', ['alex', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ---------------- ['ZhangYang', 'GuYun', '向鵬', ['ALEX', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ['ZhangYang', 'GuYun', 'XiangPeng', ['ALEX', 'Jack'], 'ChengRongHua', 'XuLiangchen'] Process finished with exit code 0 '''
#列表copy 深copy 是完成建立一個相同的列表,徹底獨立的兩個列表 import copy names = ["ZhangYang", "GuYun", "XiangPeng", ["alex", "Jack"], "ChengRongHua","XuLiangchen"] #print(names) names2 = copy.deepcopy(names) print(names, '\n', names2) names[2] = "向鵬" names[3][0] = "ALEX" print("----------------") print(names, '\n', names2) ''' E:\software\pystudy\venv\Scripts\python.exe E:/software/pystudy/day2/names.py ['ZhangYang', 'GuYun', 'XiangPeng', ['alex', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ['ZhangYang', 'GuYun', 'XiangPeng', ['alex', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ---------------- ['ZhangYang', 'GuYun', '向鵬', ['ALEX', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ['ZhangYang', 'GuYun', 'XiangPeng', ['alex', 'Jack'], 'ChengRongHua', 'XuLiangchen'] Process finished with exit code 0 '''
#列表 循環 names = ["ZhangYang", "GuYun", "XiangPeng", ["alex", "Jack"], "ChengRongHua","XuLiangchen"] print(names ) print("------------") for i in names: print(i) print("------------") print(names[0:-1:2] )#切片步長取列表值,列表從第一個元素起,每間隔一個元素,打印一個元素 print(names[0:-1:2] )#與上面結果相同 ''' E:\software\pystudy\venv\Scripts\python.exe E:/software/pystudy/day2/names.py ['ZhangYang', 'GuYun', 'XiangPeng', ['alex', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ------------E:\software\pystudy\venv\Scripts\python.exe E:/software/pystudy/day2/names.py ['ZhangYang', 'GuYun', 'XiangPeng', ['alex', 'Jack'], 'ChengRongHua', 'XuLiangchen'] ------------ ZhangYang GuYun XiangPeng ['alex', 'Jack'] ChengRongHua XuLiangchen ------------ ['ZhangYang', 'XiangPeng', 'ChengRongHua'] ['ZhangYang', 'XiangPeng', 'ChengRongHua'] Process finished with exit code 0 '''
元組其實和列表差很少,也是存一組數,只是它一旦建立,便沒法修改,因此又叫只讀列表。html
語法:python
names("alex", "jack", "eric")
它只有兩個方法,一個count,一個index,完畢linux
#購物車程序 ''' 一、啓動程序後,輸入用戶名密碼後,讓用戶輸入工資,而後打印商品列表 二、容許用戶根據商品編號購買商品 三、用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒 四、可隨時退出,退出時,打印已購買商品和餘額 五、在用戶使用過程當中, 關鍵輸出,如餘額,商品已加入購物車等消息,需高亮顯示 ''' product_list = [ ('Iphone', 5800,), ('Mac Pro', 9800), ('Bike', 800), ('Watch', 10600), ('Coffee', 31), ('Alex Python', 120), ] shoping_list = [] #定義臨時列表存放已購買的商品 salary = input("Input your salary:") if salary.isdigit(): #isdigit 判斷整數 salary = int(salary) while True: for index, item in enumerate(product_list):#enumerate將列表下標取出來 print(index, item) user_choice = input("選擇要購買的商品>>>:") if user_choice.isdigit():#isdigit判斷是不是數字 user_choice = int(user_choice) if user_choice < len(product_list) and user_choice >= 0: p_item = product_list[user_choice] if p_item[1] <= salary: #工資夠買選擇的商品 shoping_list.append(p_item) salary -= p_item[1] print("Added %s into shopping cart, you current balance is \033[31;1m%s\033[0m" %(p_item,salary)) #打印字體爲紅色,31是紅色,32是綠色 33 黃色 else: print("\033[41;1m你的餘額只剩[%s]啦,不夠支付本次購買商品!\033[0m" % salary) #打印背景爲紅色 else: print("product code \033[34;1m[%s]\033[0m is not exists!" % user_choice) #34藍色 elif user_choice == 'q': print("--------------shopping list ------------") for item_list in shoping_list: print(item_list) print("you current balance is \033[33;1m%s\033[0m" % salary) exit() else: print("invalid option") else: print("invalid salary!") exit()
name = "my name is alex" name2 = "我是人民子弟兵" print(name2.encode("utf-8")) #將字符串轉換成二進制 print(name.count("a")) #統計字符串中有多少個a print(name.capitalize())#字符串首字母大寫 print(name.center(50, "-")) #字符串打印總長度50,不夠用"-"補齊,並將name字符串居中顯示 print(name.endswith("ex")) #以什麼結尾 返回True or False name = "my \tname is alex" print(name.expandtabs(tabsize=5))# 將\t table鍵 轉換成多少空格 print(name.find('name')) #查找某個字符/字符串開始位置 字符串第一個字符從0開始,\t算一個table鍵,因此name前面有4個字符 print(name[name.find('name'):]) #字符串切片 name ="my \tname is {name} and i am {year} old" print(name.format(name='alex', year=23)) #format 將花括號中的變量賦值, 打印結果:my name is alex and i am 23 old print(name.format_map({'name':'alex','year':12}))#format_map 是用字典的形式給變量傳值。此語法不多用 print(name.index('n'))#字符串索引開始位置,\t算一個table鍵,因此n前面有4個字符 打印結果:4 print('aA23'.isalnum()) #判斷是不是安拉博字符(英文字符和數字) 執行結果:True print('aA 23'.isalnum()) #判斷是不是安拉博字符(英文字符和數字) 執行結果:False print('aAb'.isalpha()) #判斷是不是純英文字符 執行結果:True print('aA2b'.isalpha()) #判斷是不是純英文字符 執行結果:False print('0x1A'.isdecimal()) #判斷是不是十進制 執行結果:False print('987'.isdecimal()) #判斷是不是十進制 執行結果:True print('1.2'.isdigit()) #判斷是不是一個整數 執行結果:False print('133'.isdigit()) #判斷是不是一個整數 執行結果:True print('__'.isidentifier()) #判斷是不是一個合法的標識符(變量名) 執行結果:True print('1__'.isidentifier()) #判斷是不是一個合法的標識符(變量名) 執行結果:False 變量名只能以_和英文字母開頭,不能以數字開頭 print('aa'.isnumeric()) #判斷是否是一個數字 執行結果:False print('33'.isnumeric()) #判斷是否是一個數字 執行結果:True print(" ".isspace()) #判斷是不是一個空格 執行結果:True print('My Name Is'.istitle()) #判斷是不是一個標題 每一個單詞首字母要大寫 執行結果:True print('My Name Is'.isprintable()) #判斷是否能打印,字符串都是能夠打印的,只有linux中設備tty開頭的文件不能打印的 print('My Name Is'.isupper()) #判斷字符串全是大寫 print(','.join(['1','2','3','4'])) #把列表變成字符串 執行結果:1,2,3,4 print('+'.join(['1','2','3','4'])) #把列表變成字符串 執行結果:1+2+3+4 print(name.ljust(50,'*')) #長度50 不夠用*補 補後面 print(name.rjust(50,'-')) #長度50 不夠補 補前面 print('ALEX'.lower()) #把大寫變成小寫 print("alex".upper()) #小寫變成大寫 print('\nAlex'.lstrip()) #從左邊去空格和回車 print('Alex\n'.rstrip()) #從右邊去掉空格和回車 print('\n Alex\n'.strip()) #去掉空格和回車
print('000Alex00'.strip(0))#去掉字符串先後的0
p = str.maketrans('abcdef','123456') print('abcdefalex li'.translate(p)) #maketrans將字符串abcde替換成123456,a換成1,b換成2 稱爲加密 print('alex li'.replace('l','L',1)) #替換字符串,將小寫l替換成大寫L,最後一個參數是替換幾個, 執行結果:aLex li print('alex li'.replace('l','L',2)) #替換字符串,將小寫l替換成大寫L,最後一個參數是替換幾個, 執行結果:aLex Li print('alex li'.rfind('ex')) #字符/字符串最後出現的位置 執行結果:2 print('alex li ex'.rfind('ex')) #字符/字符串最後出現的位置 執行結果:8 print("alex".split('e')) #按照關鍵字將字符串分紅列表 執行結果爲:['al', 'x'] print('1+2+\n3+4'.splitlines()) #按換行符分紅列表 執行結果爲:['1+2+', '3+4'] print('1+2+\n3+4'.startswith('1+')) #以關鍵字開頭 執行結果:True print('1+2+\n3+4'.startswith('+')) #以關鍵字開頭 執行結果:False print('Alex Li'.swapcase()) #大小寫顛倒 執行結果:aLEX lI print('Alex i'.title()) #把每一個單詞首字母變成大寫 執行結果:Alex I print('lex li'.zfill(50)) #50字符 不夠用0左填充
字典一種key-value的數據類型,使用就像咱們上學用的字典,經過筆畫、字母來查找對應頁的詳細內容。git
語法: spring
#key - value
info = { 'stu1101': 'ZhangSan', 'stu1102': 'LiSi', 'stu1103': 'WangWu', }
print(info)
執行結果:
{'stu1101': 'ZhangSan', 'stu1102': 'LiSi', 'stu1103': 'WangWu'}
字典的特性:windows
dict是無序的。api
key必須是惟一的,so天生去重緩存
# 字典的增刪改查 info = { 'stu1101': 'ZhangSan', 'stu1102': 'LiSi', 'stu1103': 'WangWu', } #print(info["stu1102"]) #根據字典的key值查找後面的value 執行結果:LiSi #print(info["stu1104"]) #根據字典的key值查找後面的value 執行結果:LiSi ,若是字典中沒有key值,程序就拋異常 #print(info.get("stu1104"))#安全查找方法,若是有就返回,無就返回none #print("stu1103" in info ) #判斷字典中的key值是否存在,存在返回True 不存在返回flase #info["stu1102"] = "李四"#根據字典的key值修改後面的value值 打印執行結果爲:{'stu1101': 'ZhangSan', 'stu1102': '李四', 'stu1103': 'WangWu'} #info["stu1106"] = "李四" #若是要修改的字典的key值不存在,就添加到字典中 打印執行結果爲:{'stu1101': 'ZhangSan', 'stu1102': 'LiSi', 'stu1103': 'WangWu', 'stu1106': '李四'} b = {'stu1101': 'ZhangSan', "stu1108": "zsy", "stu1109": "ts",} info.update(b) #字典合併,info中有的值保留,b字典中若是有info中的key值的,更新字典中的值。執行結果:{'stu1101': 'ZhangSan', 'stu1102': 'LiSi', 'stu1103': 'WangWu', 'stu1108': 'zsy', 'stu1109': 'ts'} print(info.items())#將字典轉換成列表:執行結果:dict_items([('stu1101', 'ZhangSan'), ('stu1102', 'LiSi'), ('stu1103', 'WangWu'), ('stu1108', 'zsy'), ('stu1109', 'ts')]) # del #del info #刪除整個字典 #del info["stu1102"] #刪除字典中key值是stu1102的元素 :執行結果:{'stu1101': 'ZhangSan', 'stu1103': 'WangWu'} #info.pop("stu1102") #刪除字典中key值是stu1102的元素 :執行結果:{'stu1101': 'ZhangSan', 'stu1103': 'WangWu'} #info.popitem()#隨機刪除字典中一個元素 執行結果爲:{'stu1101': 'ZhangSan', 'stu1102': 'LiSi'} print(info)
#字典的循環
for i in info:
print(i, info[i])
#dict1 = info.fromkeys(['5','8','9']) #建立一個字典,每一個value值都爲空 dict1 = info.fromkeys([5, 8, 9], "ys") #建立一個字典,每一個value值都爲ys dict1[8] = "ysys" #若是字典value是字符串等簡單的數據類型,修改value修改的只是對應的value print(dict1) dict1 = info.fromkeys(['5', '8', '9'] , ["776", {"name" : "alex"}, "98"]) #建立一個字典,每一個value值都爲列表 ["776",{"name" : "alex"},"98"] dict1['8'][1] ["name"] = "spring" #若是字典value是列表,修改value值時,對應的每一個key值的value都會修改,此時的value實際上對應的是內存地址。 print(dict1)
多級字典:安全
#字典的多級嵌套---三級菜單(三種方式) #要求: #1.能夠進入子菜單 #2.能夠返回上一級 #3.能夠從任意一級直接退出 data = { '山東': { '青島': ['四方', '黃島', '嶗山', '李滄', '城陽'], '濟南': ['歷城', '槐蔭', '高新', '長青', '章丘'], '煙臺': ['龍口', '萊山', '牟平', '蓬萊', '招遠'] }, '江蘇': { '蘇州': ['滄浪', '相城', '平江', '吳中', '崑山'], '南京': {'白下':['超市','便利店'], '秦淮':['超市','便利店'], '浦口':['超市','便利店'], '棲霞':['超市','便利店'], '江寧':['超市','便利店']}, '無錫': ['崇安', '南長', '北塘', '錫山', '江陰'] }, } # key值儘可能不要寫中文,可能會存在字符編碼致使沒法正常操做 #data["江蘇"]["無錫"][2] = "北塘" #修改字典key對應的value值,執行結果爲:{'山東': {'青島': ['四方', '黃島', '嶗山', '李滄', '城陽'], '濟南': ['歷城', '槐蔭', '高新', '長青', '章丘'], '煙臺': ['龍口', '萊山', '牟平', '蓬萊', '招遠']}, '江蘇': {'蘇州': ['滄浪', '相城', '平江', '吳中', '崑山'], '南京': ['白下', '秦淮', '浦口', '棲霞', '江寧'], '無錫': ['崇安', '南長', '北塘', '錫山', '江陰']}} #data.setdefault("QH",{"XN" : "huangzhong"}) #字典中建立一個新值,若是要建立的值字典中存在,就保留原值不變,建立無效 #print(data) #城市只能選擇南京,其餘的數據最下層不對 exit_flag = False while not exit_flag: for i in data: print(i) choice = input("請選擇進入省份》》:") if choice in data: while not exit_flag: for j in data[choice]: print("\t", j) choice2 = input("請選擇進入城市》》:") if choice2 in data[choice]: while not exit_flag: for k in data[choice][choice2]: print("\t\t",k) choice3 = input("請選擇進入區縣》》:") if choice3 in data[choice][choice2]: for l in data[choice][choice2][choice3]: print("\t\t\t",l) choice4 = input("進入最後一層了,選擇b返回,q退出》》:") if choice4 == "b": pass elif choice4 == "q": exit_flag = True elif choice3 == "b": break elif choice3 == "q": exit_flag = True elif choice2 == "b": break elif choice2 == "q": exit_flag = True elif choice == "q": exit_flag = True
集合是一個無序的,不重複的數據組合,它的主要做用以下:網絡
去重,把一個列表變成集合,就自動去重了,
關係測試,測試兩組數據之間的交集、差集、並集等關係
list_1=[1, 3, 5, 7, 9] list_1 = set(list_1) #print(list_1, type(list_1)) #打印集合,以及集合類型 list_2 = set([2, 4, 6, 3, 9, 10]) print(list_1, list_2) # 執行結果:{1, 3, 5, 7, 9} {2, 3, 4, 6, 9, 10} #交集 print(list_1.intersection(list_2)) # 交集是將兩個集合中共有的元素,執行結果:{9, 3} print(list_1 & list_2) #交集的運算符寫法 #並集 print(list_1.union(list_2)) #並集是將兩個集合合併,重複的元素只顯示一次,執行結果:{1, 2, 3, 4, 5, 6, 7, 9, 10} print(list_1 | list_2) #差集 print(list_1.difference(list_2)) #差集是去掉兩個集合中共有的元素,顯示list_1剩餘的元素,執行結果:{1, 5, 7} print(list_2.difference(list_1)) #差集是去掉兩個集合中共有的元素,顯示list_2剩餘的元素,執行結果:{2, 10, 4, 6} print(list_1 - list_2) print(list_2 - list_1) #子集 list_3 = set([3,5,7]) print(list_3.issubset(list_1)) #子集是判斷list_1中是否所有包含list_3的元素,執行結果:True print(list_3.issubset(list_2))# 執行結果:False #父集 print(list_1.issuperset(list_3)) #執行結果:True #對稱差集 print(list_1.symmetric_difference(list_2)) #對稱差集是將兩個集合合併,兩個集合中重複的元素所有去除掉,執行結果:{1, 2, 4, 5, 6, 7, 10} print(list_1 ^ list_2) #其餘關係測試 list_4 = set([2,4,6]) print(list_1.isdisjoint(list_2)) #若是兩個集合中沒有交集,返回Ture,執行結果:False print(list_1.isdisjoint(list_4))#執行結果:True #集合添加操做 list_1.add(99) print(list_1) #執行結果:{1, 3, 99, 5, 7, 9} list_1.update([888, 444, 333]) print(list_1)#添加多個元素,執行結果:{1, 3, 99, 5, 7, 9, 333, 888, 444} #集合的刪除,集合是去重的,不可能有重複的元素 list_1.remove(99) #刪除若是不存在的元素,系統會提示異常 print(list_1)#執行結果:{1, 3, 5, 7, 9, 333, 888, 444} print(list_2.pop())#刪除任意一個集合中的元素,並返回刪除的元素,執行結果:2 list_2.discard(8)#刪除不存在的元素不會提示異常 print(list_2)#執行結果:{3, 4, 6, 9, 10} list_2.discard(10)#刪除不存在的元素不會提示異常 print(list_2)#執行結果:{3, 4, 6, 9} #集合的長度 print(len(list_1))#執行結果:8 #檢查元素是否在集合中存在 print(9 in list_1)#執行結果:True #檢查元素是否不是集合中的成員 print(9 not in list_1) #執行結果:False print(6 not in list_1) #執行結果:True
#文件操做 #文件讀取 r是文件讀模式,w是文件的寫模式是建立文件,若是原來有文件就會覆蓋原來的文件;a=append是文件的追加模式,不能讀取文件 f = open("yesterday",'r',encoding="utf-8") #文件的句柄,也就是內存對象 data = f.read() #當文件被讀取後,第二次再讀取文件已經跳的行尾,因此再次讀取文件是就讀不到文件 data2 = f.read() f.close() print(data) print("--data2--", data2) #文件寫操做,w模式 #讀取到yesterday中內容,寫入yesterday2中 f = open("yesterday",'r',encoding="utf-8") #文件的句柄,也就是內存對象 data = f.read() #當文件被讀取後,第二次再讀取文件已經跳的行尾,因此再次讀取文件是就讀不到文件 f.close() f = open("yesterday2", 'w', encoding="utf-8") #文件的句柄,也就是內存對象 f.write(data) f.close() #文件的追加操做 a=append,不能讀取文件. f = open("yesterday2", 'a', encoding="utf-8") #文件的句柄,也就是內存對象 f.write("我愛北京天安門\n") f.write("天安門上太陽升\n") f.close()
#文件的循環讀取操做,要求第十行不打印,f.readlines()是默認將文件預先讀取到內存中,若是文件太大就沒法使用該方法. f = open("yesterday2",'r',encoding="utf-8") #文件的句柄,也就是內存對象 for index, line in enumerate(f.readlines()):#f.readlines()是把文件讀取成一個列表,enumerate取列表下標, if index == 9: print("------我是分割線--------") #爲了標識清楚,打印成分割線 continue print(index,line.strip())#windows文件存儲,默認每行後面有換行符,strip做用是去掉換行和回車 f.close() #文件的高效讀取,逐行讀取文件,讀取完成後釋放內存,使用迭代技術,後面會學到 count =0 f = open("yesterday2",'r',encoding="utf-8") #文件的句柄,也就是內存對象 for line in f: if count == 9: print("------我是分割線--------") #爲了標識清楚,打印成分割線 count += 1 continue print(count, line) count += 1 f.close()
#進度條 import sys, time for i in range(50): sys.stdout.write("#") #stdout標準輸出方法 sys.stdout.flush() time.sleep(0.1)
#文件操做方法 f = open("yesterday2",'r',encoding="utf-8") #文件的句柄,也就是內存對象 print(f.tell()) #查看文件光標,文件開始從0開始, print(f.readline()) #f.readline()讀取文件中一行內容 #print(f.read(5)) #讀取5個字符 print(f.encoding)#打印文件編碼 print(f.fileno())#返回文件句柄在內存中的編號,python打開文件其實是調用操做系統方法接口實現的,文件系統是給全部程序使用的。 基本上不用它 print(f.name) #打印文件名稱 #f.readable() f.writable() #後面本身學習 print(f.flush()) #寫文件時,系統不是把每次的操做都寫入硬盤,有一個內存緩存,會先寫入內存緩存中,在提交到硬盤中,執行f.flush()會立馬將文件寫入硬盤 print(f.tell()) #查看文件光標,文件開始從0開始,當用f.readlines()方法讀取文件後,f.readlines()值變爲32,tell的計數是按照字符串個數計數的,並非讀取一行後tell值變爲1 f.seek(0)#將光標移到文件開始位置,也能夠f.seek(10)的位置 #f.truncate() #清除所有文件,慎用 f.truncate(20)#截斷文件,保留前20個字符
#文件的讀寫模式 r+ ,文件寫的內容只能添加的文件最後,不能修改原文件原來的內容 f = open("yesterday2",'r+',encoding="utf-8") #文件的句柄,也就是內存對象 print(f.readline()) print(f.readline()) print(f.readline()) f.write("你好,python")
文件操做還有w+模式 a+模式 基本不用,就不舉例了,wb和rb模式是二進制文件,網絡傳輸會用到。
#文件修改,將一個文件逐行讀出,並查找到要修改的內容,將原來的內容替換成新的內容,將原文件逐行寫入新文件中 f = open("yesterday2", 'r', encoding="utf-8") #文件的句柄,也就是內存對象 f_new = open("yesterday3", 'w', encoding="utf-8") #文件的句柄,也就是內存對象 for line in f: if "有那麼多肆意的快樂等我享受" in line: #要查找的內容在這行存在 line = line.replace("有那麼多肆意的快樂等我享受", "有那麼多肆意的快樂等ALEX享受") f_new.write(line) f.close() f_new.close()
#with 語法 ,好處不用本身關閉文件。 print("------------with------------") with open("yesterday2", 'r', encoding="utf-8") as f: for line in f: print(line) #同時打開多個文件, 新的寫法,若是一行過長爲了便於查看代碼,能夠用\符號,再第二行再寫 with open("yesterday2", 'r', encoding="utf-8") as f, \ open("yesterday3", 'r', encoding="utf-8") as f2: for line in f: print(line)
詳細文章:https://www.cnblogs.com/luotianshuai/p/5735051.html
課程筆記地址:https://www.cnblogs.com/alex3714/articles/5717620.html
https://www.cnblogs.com/alex3714/articles/5740985.html
先說python2
再說python3
編碼應用比較多的場景應該是爬蟲了,互聯網上不少網站用的編碼格式很雜,雖然總體趨向都變成utf-8,但如今仍是很雜,因此爬網頁時就須要你進行各類編碼的轉換,不過生活正在變美好,期待一個不須要轉碼的世界。
最後,編碼is a piece of fucking shit, noboby likes it.
#encode編碼 decode 解碼 #python3中encode編碼後除了將編碼集修改,同時將字符串變成byte類型。 import sys print(sys.getdefaultencoding()) s = "你好" print("1-----", type(s)) s_to_gbk = s.encode("gbk") print("2-----", s_to_gbk)#python3中默認是unicode,python2中默認是ascii碼, 因此在python3中不須要將中文先解碼成utf-8,能夠直接編碼成gbk。執行結果:b'\xc4\xe3\xba\xc3' print(s_to_gbk.decode("gbk").encode("utf-8").decode()) #針對socket網絡傳輸的bytes是gbk格式的,使用此語句就能夠將bytes轉碼成utf-8正常顯示。 gbk_to_unicode = s_to_gbk.decode("gbk") #將gbk解碼變成unicode print("3------", gbk_to_unicode) print("4-------", type(gbk_to_unicode)) gbk_to_utf8 = gbk_to_unicode.encode("utf-8")#將unicode編碼成utf-8 print(gbk_to_utf8) print(type(gbk_to_utf8)) gbk_to_utf8 = gbk_to_utf8.decode("utf-8") print(type(gbk_to_utf8)) print(gbk_to_utf8) #print(s.encode("gbk").decode("gbk").encode("utf-8").decode("utf-8"))