數字python
字符串linux
列表git
元組小程序
字典api
集合bash
文件處理app
整型(int)、浮點型(float)、長整型(long)、複數ide
#整型(int) age = 10 #age = int(10) #浮點型(float) salary = 13.5 #salary = folat(13.5) #python2當中有長整型,Python3中已經取消。 >>> x = 1+2j >>> x.real 1.0 >>> x.imag 2.0 >>>
使用場景:須要描述性的地方函數
字符串:定義在單引號、雙引號、三引號中的一串字符工具
#------------優先掌握的操做:------------------ #一、按索引取值(正向取+反向取) :只能取 #二、切片(顧頭不顧尾,步長) #三、長度len #四、成員運算in和not in #五、移除空白strip #六、切分split #七、循環 #-------------------須要掌握的-------------------- #一、strip,lstrip,rstrip #二、lower,upper #三、startswith,endswith #四、format的三種玩法 #五、split,rsplit #六、join #七、replace #八、isdigit
#一、strip,lstrip,rstrip###strip的默認移除的是空格 name = '*****grape*********' print(name.strip('*')) grape print(name.lstrip('*')) grape********* print(name.rstrip('*')) *****grape #二、lower,upper name = '*****grape*********' print(name.upper()) *****GRAPE********* print(name.lower()) *****grape********* #三、startswith,endswith name = '*****grape.lee' print(name.startswith('*')) True print(name.endswith('lee')) True #四、format的三種玩法 ''' #s1是使用%s進行格式化 #s2是利用format的值的位置進行格式化 #s3是利用format的關鍵字命名方式 #s4是根據出現的順序進行格式化 ''' s1 = 'My name is \033[31;1m%s\033[0m:' %('grape') print(s1) My name is grape: s2 = 'My name is \033[31;1m{0}\033[0m:'.format('grape') print(s2) My name is grape: s3 = 'My name is \033[31;1m{name}\033[0m:'.format(name = 'grape') print(s2) My name is grape: s4 = 'My name is \033[31;1m{}\033[0m,I am a \033[32;1m{}\033[0m:'.format('grape','boy') print(s4) My name is grape,I am a boy: #五、split,rsplit ''' split默認的分隔符是空格,分隔後得到的是一個用逗號','分隔的列表。 rsplit是指定從右邊開始以指定數目的利用分隔符分開,並保存到列表當中。 ''' name='root:x:0:0::/root:/bin/bash' print(name.split(':')) ['root', 'x', '0', '0', '', '/root', '/bin/bash'] print(name.rsplit(':',1)) ['root:x:0:0::/root', '/bin/bash'] #六、join tag = " " print(tag.join(['my','name','is','grape'])) my name is grape #七、replace name='alex say :i have one tesla,my name is alex' print(name.replace('alex','Alex',1)) #八、isdigit,經常使用於判斷字符是不是數字 salary = '123345' print(salary.isdigit()) True
#一、find,rfind,index,rindex,count # name='egon say hello' # print(name.find('o',1,3))#顧頭不顧尾,找不到則返回-1,不會報錯,找到了則顯示索引。 # 2 # print(name.count('e',1,3))#顧頭不顧尾,若是不指定範圍則查找全部 # 0 # print(name.index('e',1))#顧頭不顧尾,找不到會報錯。找到後返回第一個找到的索引值。 # 10 #二、center,ljust,rjust,zfill # name='egon' # print(name.center(50,'#'))#居中,不足50的位置用#號填充。 # #######################egon####################### # print(name.ljust(10,'#'))#左對齊,不足10位的地方用用#號填充。 # egon###### # print(name.rjust(10,'#'))#右對齊,不足10位的地方用用#號填充。 # ######egon # print(name.zfill(10))#右對齊,不足10位的地方用用0填充。 # 000000egon #三、expandtabs # name='egon\thello' # print(name.expandtabs(1))#把字符串中的tab鍵以1個空格的空間打印出來 # print(name.expandtabs(4))#把字符串中的tab鍵以4個空格的空間打印出來 # print(name.expandtabs())#默認不指定的話,是4個空格做爲一個tab # egon hello # egon hello # egon hello #四、captalize,swapcase,title # name='agon Ni Hao' # print(name.capitalize())#首字母大寫 # print(name.swapcase())#大小寫交換 # print(name.title())#全部單詞的首字母大寫 # Agon ni hao # AGON nI hAO # Agon Ni Hao #五、is數字系列 # num1=b'4' #bytes # num2=u'4' #unicode,python3中無需加u就是unicode # num3='四' #中文數字 # num4='Ⅳ' #羅馬數字 #isdigt:bytes,unicode # print(num1.isdigit()) #True # print(num2.isdigit()) #True # print(num3.isdigit()) #False # print(num4.isdigit()) #False #isdecimal:uncicode #bytes類型無isdecimal方法 # print(num2.isdecimal()) #True # print(num3.isdecimal()) #False # print(num4.isdecimal()) #False #isnumberic:unicode,中文數字,羅馬數字 #bytes類型無isnumberic方法 # print(num2.isnumeric()) #True # print(num3.isnumeric()) #True # print(num4.isnumeric()) #True """ 最經常使用的是isdigit,能夠判斷bytes和unicode類型,這也是最長見的數字應用場景, 若是要判斷中文數字或羅馬數字,則用到isnumeric """ #六、is其餘 # name='grape123' # print(name.isalnum())#判斷字符串有字母和數字組成 # print(name.isalpha())#判斷字符串只有字母組成 # print(name.isidentifier())#判斷是不是標識 # print(name.islower())#判斷是否所有小寫 # print(name.isupper())#判斷是否所有大寫 # print(name.isspace())#判斷是不是空格 # print(name.istitle())#判斷是不是title
# 寫代碼,有以下變量,請按照要求實現每一個功能 (共6分,每小題各0.5分) name = " aleX" # 1) 移除 name 變量對應的值兩邊的空格,並輸出處理結果 print(name.strip()) # 2) 判斷 name 變量對應的值是否以 "al" 開頭,並輸出結果 print(name.startswith('al')) # 3) 判斷 name 變量對應的值是否以 "X" 結尾,並輸出結果 print(name.endswith('X')) # 4) 將 name 變量對應的值中的 「l」 替換爲 「p」,並輸出結果 print(name.replace('l','p')) # 5) 將 name 變量對應的值根據 「l」 分割,並輸出結果。 print(name.split('l')) # 6) 將 name 變量對應的值變大寫,並輸出結果 print(name.upper()) # 7) 將 name 變量對應的值變小寫,並輸出結果 print(name.lower()) # 8) 請輸出 name 變量對應的值的第 2 個字符? print(name[1]) # 9) 請輸出 name 變量對應的值的前 3 個字符? print(name[2]) # 10) 請輸出 name 變量對應的值的後 2 個字符? print(name[-2:]) # 11) 請輸出 name 變量對應的值中 「e」 所在索引位置? print(name.find('e')) # 12) 獲取子序列,去掉最後一個字符。如: oldboy 則獲取 oldbo。 print(name[:-1])
#優先掌握的操做: #一、按索引存取值(正向存取+反向存取):便可存也能夠取 #二、切片(顧頭不顧尾,步長) #三、長度 #四、成員運算in和not in #五、追加 #六、刪除 #七、循環
#pop方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee'] print(name.pop(2))#pop默認刪除的是最後一個元素,制定索引的話,刪除制定索引的元素。 print(name) name ['hello', 'my', 'is', 'Grape.lee'] ''' ''' #insert方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee'] print(name.insert(1,'haha'))#在制定索引位置後邊添加元素。返回值爲None print(name) ''' ''' #append方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee'] print(name.append('meinv'))#在列表最後邊添加一個元素,範圍值爲None print(name) None ['hello', 'my', 'name', 'is', 'Grape.lee', 'meinv'] ''' ''' #remove方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee'] print(name.remove('Grape.lee'))#刪除列表中指定的元素,範圍值爲None print(name) ''' ''' #count方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee'] print(name.count('hello'))#統計列表中元素的個數。 ''' ''' #extend方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee'] l1 = ['haha','boy'] print(name.extend(l1))#extend用於擴着列表:把另一個列表內全部的元素添加到本身的類表中。返回值爲None print(name) None ['hello', 'my', 'name', 'is', 'Grape.lee', 'haha', 'boy'] ''' ''' #index方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee'] print(name.index('Grape.lee'))#得到指定元素的索引位置。 ''' ''' name = ['hello', 'my', 'name', 'is', 'Grape.lee'] print(name.reverse())#將列表裏邊的元素順序顛倒。返回值爲None print(name) None ['Grape.lee', 'is', 'name', 'my', 'hello'] ''' ''' #sort方法 name = ['hello', 'my', 'name', 'is', 'Grape.lee','aaabbb','123','_123'] print(name.sort())#對列表裏邊的元素排序,順序爲"字符串數字 < 大寫字母 < 下劃線 < 小寫字母",返回值None print(name) None ['123', 'Grape.lee', '_123', 'aaabbb', 'hello', 'is', 'my', 'name'] ''' print('a' > 'A') print('a'> '1')
#1. 有列表data=['alex',49,[1900,3,18]],分別取出列表中的名字,年齡,出生的年,月,日賦值給不一樣的變量 # data=['alex',49,[1900,3,18]] # name = data[0] # age = data[1] # year = data[2][0] # month = data[2][1] # day = data[2][2] # print(name,age,year,month,day) # alex 49 1900 3 18 #2. 用列表模擬隊列 ''' #apped方式模擬隊列 #入棧: l1 = [] l1.append('one') l1.append('two') l1.append('three') #出棧 l1 = ['one', 'two', 'three'] print(l1.pop(0)) print(l1.pop(0)) print(l1.pop(0)) ''' ''' #insert方式模擬隊列 #入棧 l1 = [] print(l1.insert(0,'one')) print(l1.insert(1,'two')) print(l1.insert(2,'three')) print(l1) #出棧 print(l1.pop(0)) print(l1.pop(0)) print(l1.pop(0)) ''' #3. 用列表模擬堆棧 ''' #入棧: l1 = [] l1.append('one') print(l1) l1.append('two') print(l1) l1.append('three') print(l1) #出棧 print(l1.pop()) print(l1.pop()) print(l1.pop()) ''' #4. 有以下列表,請按照年齡排序(涉及到匿名函數) l=[ {'name':'alex','age':84}, {'name':'oldboy','age':73}, {'name':'egon','age':18}, ] print(l.sort(key = lambda i:i['age'])) print(l) None [{'name': 'egon', 'age': 18}, {'name': 'oldboy', 'age': 73}, {'name': 'alex', 'age': 84}]
能夠存儲個任意類型元素的不可變列表,放在()裏邊。
#優先掌握的操做: #一、按索引取值(正向取+反向取):只能取 #二、切片(顧頭不顧尾,步長) #三、長度 #四、成員運算in和not in #五、循環
''' name = ('hello', 'my', 'name', 'is', 'Grape.lee') print(name.index('name'))#得到指定元素的索引值 print(name.count('is'))#統計指定元素的個數 print(len(name))#得到元組的元素個數 print(name[1])#得到指定索引所在位置的元素的值。 print(name[1:3]) print(name[-1:]) print(name[-3:])#反向取值的時間也是取值索引的數字大小從左到右依次增大,例如:[-3:-1],[-10:-6] print(name[-3:-1]) print('hello' in name) '''
#簡單購物車,要求以下: 實現打印商品詳細信息,用戶輸入商品名和購買個數,則將商品名,價格,購買個數加入購物列表,若是輸入爲空或其餘非法輸入則要求用戶從新輸入 msg_dic={ 'apple':10, 'tesla':100000, 'mac':3000, 'lenovo':30000, 'chicken':10, } shop_list = [] while True: for k,v in msg_dic.items(): print(k,v) goods = input("\033[31;1m請輸入你要買的商品名:\033[0m").strip() if len(goods) == 0 or goods not in msg_dic.keys(): continue num = input("\033[31;1m請輸入你要購買的數量:\033[0m").strip() if not num or not num.isdigit():continue shop_list.append((goods,msg_dic[goods],num)) print(shop_list)
字典是一種無序的鍵值對,key 必須是不可變元素,value能夠是任意類型的元素。
#優先掌握的操做: #一、按key存取值:可存可取 #二、長度len #三、成員運算in和not in #四、刪除 #五、鍵keys(),值values(),鍵值對items() #六、循環
info={'name':'egon','age':18,'sex':'male'} ''' #keys方法: print(info.keys())#dict_keys(['name', 'age', 'sex']) ''' ''' #items方法: print(info.items())#dict_items([('name', 'egon'), ('age', 18), ('sex', 'male')] ''' ''' #get方法: print(info.get('age'))#18 ''' ''' #pop方法: print(info.pop('name'))#刪除制定key的元素,並返回對應的value # print(info) ''' ''' #popitem方法: print(info.popitem())#隨機彈出一個鍵值對,並返回彈出的鍵值對的元組。 ''' ''' #values方法: print(info.values())#得到全部的values dict_values(['egon', 18, 'male']) ''' ''' #setdefault方法: print(info.setdefault('age',38)) print(info.setdefault('job','teacher'))#setdefault,若是setdefault制定的key已經存在則什麼都不作,若是key不存在就追加到字典中。追加成功的話返回成功的值,不成功返回原來的值。 print(info) 18 teacher {'name': 'egon', 'age': 18, 'sex': 'male', 'job': 'teacher'} ''' ''' #update方法: print(info.update({'age':'38'}))#利用字典更新老的字典,返回值爲None print(info) None {'name': 'egon', 'age': '38', 'sex': 'male'} ''' ''' #fromkeys方法:根據序列生成對應的key,value默認用None填充,若是指定了就用指定的value。 ltmp = ['a','b','c'] print(info.fromkeys([1,2,3,4,5,6],'good')) print(info.fromkeys([1,2,3,4,5,6])) print(info) print(info.fromkeys(ltmp)) print(info) ''' ''' #len,for循環 print(len(info)) print('name' in info) for key in info: print(key) for k,v in info.items(): print(k,v) for k in info.keys(): print(k) for v in info.values(): print(v) '''
''' 1 有以下值集合 [11,22,33,44,55,66,77,88,99,90...],將全部大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中 即: {'k1': 大於66的全部值, 'k2': 小於66的全部值} l1 = [11,22,33,44,55,66,77,88,99,90] d1 = {'k1':[],'k2':[]} for i in l1: if i > 66: d1['k1'].append(i) else: d1['k2'].append(i) print(d1) ''' ''' 2 統計s='hello alex alex say hello sb sb'中每一個單詞的個數 結果如:{'hello': 2, 'alex': 2, 'say': 1, 'sb': 2} #方法一: s='hello alex alex say hello sb sb' d1 = {} for i in s.split(): d1.setdefault(i,s.split().count(i)) print(d1) #方法二: s='hello alex alex say hello sb sb' d1 = {} for i in s.split(): if i in d1: d1[i] += 1 else: d1[i] = 1 print(d1) '''
#定義集合: 集合:能夠包含多個元素,用逗號分割, 集合的元素遵循三個原則: 1:每一個元素必須是不可變類型(可hash,可做爲字典的key) 2:沒有重複的元素 3:無序 注意集合的目的是將不一樣的值存放到一塊兒,不一樣的集合間用來作關係運算,無需糾結於集合中單個值 #優先掌握的操做: #一、長度len #二、成員運算in和not in #三、|合集 #四、&交集 #五、-差集 #六、^對稱差集 #七、== #八、父集:>,>= #九、子集:<,<=
''' 一.關係運算 有以下兩個集合,pythons是報名python課程的學員名字集合,linuxs是報名linux課程的學員名字集合 pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} linuxs={'wupeiqi','oldboy','gangdan'} 1. 求出即報名python又報名linux課程的學員名字集合 2. 求出全部報名的學生名字集合 3. 求出只報名python課程的學員名字 4. 求出沒有同時報這兩門課程的學員名字集合 ''' pythons={'alex','egon','yuanhao','wupeiqi','gangdan','biubiu'} linuxs={'wupeiqi','oldboy','gangdan'} print(pythons & linuxs) print(pythons | linuxs) print(pythons - linuxs) print(pythons ^ linuxs)
#!/usr/bin/env python # -*- coding:UTF-8 -*- ''' #做業二:請閉眼寫出購物車程序 #需求: 用戶名和密碼存放於文件中,格式爲:egon|egon123 啓動程序後,先登陸,登陸成功則讓用戶輸入工資,而後打印商品列表,失敗則從新登陸,超過三次則退出程序 容許用戶根據商品編號購買商品 用戶選擇商品後,檢測餘額是否夠,夠就直接扣款,不夠就提醒 可隨時退出,退出時,打印已購買商品和餘額 ''' goods_list = [['Iphone7',5800], ['Coffee',30], ['疙瘩湯',10], ['Python Book',99], ['Bike',199], ['ViVo X9',2499], ] do_list = ["註冊","登陸","購物"] shopping_cart={} current_userinfo=[] db_file=r'db.txt' while True: for i in enumerate(do_list): print(i) choice = int(input("請輸入你想要的操做,0 or 1 or 2:").strip()) if choice == 0: username = input("請輸入你要註冊的用戶名:").strip() while True: password1 = input("請輸入你的密碼:").strip() password2 = input("請再次輸入你的密碼:").strip() if password1 == password2: print("恭喜你註冊成功!!!") break else: print("你輸入的兩次密碼不一致請從新輸入:") recharge = int(input("請輸入充值金額:").strip()) with open('db.txt', 'a', encoding='utf-8') as f: f.write('%s,%s,%s\n' % (username, password2,recharge)) elif choice == 1: tag = True count = 0 while tag: if count == 3: print("用戶名密碼嘗試失敗次數太多,已經被鎖定!") break username = input("請輸入你的用戶名:").strip() password = input("請輸入密碼:").strip() with open('db.txt','r',encoding='utf-8') as f: for line in f: line = line.strip('\n') user = line.split(',')[0] pwd = line.split(',')[1] recharge = line.split(',')[2] if line.split(',')[0] == username and line.split(',')[1] == password: print("恭喜你登陸成功") current_userinfo = [user,recharge] tag = False break else: print("用戶名密碼錯誤") count += 1 elif choice == 2: if len(current_userinfo) == 0: print("請先登陸:") else: print("商品列表:") for index,goods in enumerate(goods_list): print(index,goods) tag = True while tag: chose_goods_order = input("請輸入你要購買的商品編號:").strip() if chose_goods_order == 'q': for k,v in shopping_cart.items(): print(k,v) tag = False break elif int(chose_goods_order) < 0 or int(chose_goods_order) >= len(goods_list): print("輸入的編號超出了範圍") continue else: goods_name = goods_list[int(chose_goods_order)][0] goods_price = int(goods_list[int(chose_goods_order)][1]) num1= int(input("請輸入購買的數量:").strip()) if int(current_userinfo[1]) >= goods_price * num1: shopping_cart[goods_name] = goods_price * num1 current_userinfo[1] = int(current_userinfo[1]) - goods_price * num1 continue else: print("資金不足") break print("資金餘額是%s" %current_userinfo[1]) break
#!/usr/bin/env python # -*- coding:UTF-8 -*- menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '網易':{}, 'google':{} }, '中關村':{ '愛奇藝':{}, '汽車之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龍觀':{}, }, '朝陽':{}, '東城':{}, }, '上海':{ '閔行':{ "人民廣場":{ '炸雞店':{} } }, '閘北':{ '火車戰':{ '攜程':{} } }, '浦東':{}, }, '山東':{}, } tag = True while tag: for key_1 in menu: print(key_1) select1 = input("請輸入你要選擇的地區:").strip() if not select1:continue if select1 == 'b': break if select1 == 'q': tag = False while tag: for key_2 in menu[select1]: print(key_2) select2 = input("請輸入你要選擇的區:").strip() if not select2: continue if select2 == 'b': break if select2 == 'q': tag = False while tag: for key_3 in menu[select1][select2]: print(key_3) select3 = input("請輸入你要選擇的街道:").strip() if not select3:continue if select3 == 'b': break if select3 == 'q': tag = False while tag: for key_4 in menu[select1][select2][select3]: print(key_4) select_last = input("請輸入你的最後選擇:").strip() if not select_last:continue if select_last == 'b': break if select_last == 'q': tag = False
#!/usr/bin/env python # -*- coding:UTF-8 -*- ''' 這個方式是按照老師的方法從新寫了一遍。 ''' menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '網易':{}, 'google':{} }, '中關村':{ '愛奇藝':{}, '汽車之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龍觀':{}, }, '朝陽':{}, '東城':{}, }, '上海':{ '閔行':{ "人民廣場":{ '炸雞店':{} } }, '閘北':{ '火車戰':{ '攜程':{} } }, '浦東':{}, }, '山東':{}, } layers = [menu] while True: if len(layers) == 0: break current_layer=layers[-1]#這裏以取到對應層次的字典 for key in current_layer:#到對應層的字典邊取key值 print(key) choice=input('>>: ').strip() if choice == 'b': layers.pop(-1) continue if choice == 'q':break if choice not in current_layer:continue layers.append(current_layer[choice])#每次選擇一層就把該層的字典追加到對應的memu列表中。
#!/usr/bin/env python # -*- coding:UTF-8 -*- ''' #max_level=5 * #current_level=1,空格數=4,*號數=1 *** #current_level=2,空格數=3,*號數=3 ***** #current_level=3,空格數=2,*號數=5 ******* #current_level=4,空格數=1,*號數=7 ********* #current_level=5,空格數=0,*號數=9 #數學表達式 空格數=max_level-current_level *號數=2*current_level-1 ''' max_level = 5 print(type(max_level)) for current_level in range(1,max_level+1): print((max_level - current_level) * ' ' + (2*current_level -1)*'*') print()
#!/usr/bin/env python # -*- coding:UTF-8 -*- ''' 九九階乘打印 ''' for i in range(1,10): for j in range(1,i+1): if i <= j: print('%s*%s=%s' %(i,j,i*j),end=' ') else: print('%s*%s=%s' %(j,i,i*j),end=' ') print()
1.計算機系統組成: 計算機硬件、操做系統、應用程序 2.計算機操做文件的原理: 咱們使用python或者其它語言編寫的程序若想把數據永久的保存下來,必需要保存在硬盤中,這就涉及到了應用程序要操做硬件,衆所周知,應用程序是沒法直接操做硬件的,這就用到了操做系統。操做系統把複雜的硬件操做封裝成簡單的接口給用戶/應用程序使用。其中文件是操做系統提供給應用程序來操做硬盤的虛擬概念,用戶或應用程序經過操做文件,能夠將本身的數據永久的保存下來。 3.操做文件的流程: #1.打開文件,獲得文件句柄並賦值給一個變量 #2.經過文件句柄對文件進行操做 #3.關閉文件。
操做模式: f = open('a.txt','r',encoding='utf-8') f.read() f.close() 以上這種模式須要手動的去關閉f文件句柄的open函數。 with open('test1.txt','r',encoding='utf-8') as f: pass 使用with語句能夠不用關閉文件,方便保險。 ''' with open('test1.txt','r',encoding='utf-8') as f: print(f.read())#一次性所有讀到內存中 print(f.readlines())#列表形式打印出全部結果 print(f.readline())#一次讀取一行 print(f.readable())#判斷是否可讀 ''' ''' l = ['wukong\n','bajie\n','shaseng\n'] with open('b.txt','w',encoding='utf-8') as f: print(f.write('hahah\nwukong\ntangseng\n')) print(f.writelines(l))#wirtelines是讀取列表、元組等裏邊的每一個元素循環寫入文件,至關於一個for循環 ''' ''' with open('d.txt','wb') as f: f.write('你好'.encode('utf-8')) '''
#1. 打開文件的模式有(默認爲文本模式): r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】 w,只寫模式【不可讀;不存在則建立;存在則清空內容】 a, 之追加寫模式【不可讀;不存在則建立;存在則只追加內容】 #2. 對於非文本文件,咱們只能使用b模式,"b"表示以字節的方式操做(而全部文件也都是以字節的形式存儲的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的jgp格式、視頻文件的avi格式) rb wb ab 注:以b方式打開時,讀取到的內容是字節類型,寫入時也須要提供字節類型,不能指定編碼 #3. 瞭解部分 "+" 表示能夠同時讀寫某個文件 r+, 讀寫【可讀,可寫】 w+,寫讀【可讀,可寫】 a+, 寫讀【可讀,可寫】 x, 只寫模式【不可讀;不存在則建立,存在則報錯】 x+ ,寫讀【可讀,可寫】 xb
''' 練習,利用b模式,編寫一個cp工具,要求以下: 1. 既能夠拷貝文本又能夠拷貝視頻,圖片等文件 2. 用戶一旦參數錯誤,打印命令的正確使用方法,如usage: cp source_file target_file 提示:能夠用import sys,而後用sys.argv獲取腳本後面跟的參數 ''' import sys if len(sys.argv) != 3: print("usage: cp source_file target_file") sys.exit() src_file,dest_file = sys.argv[1],sys.argv[2] with open(src_file,'rb') as f1,\ open(dest_file,'wb') as f_new: for line in f1: f_new.write(line) 方法一: #模擬文件修改: #一次性的讀取全部值,並修改,而後保存到新的文件。最後刪除老文件,把新文件重命名爲老文件的名字。 # import os # with open('file_old','r',encoding='utf-8') as f_old,\ # open('file_new','w',encoding='utf-8') as f_new: # data = f_old.read() # data=data.replace('wukong','meihouwang') # f_new.write(data) # # os.remove('file_old') # os.rename('file_new','file_old') 方法二: import os with open('file_old','r',encoding='utf-8') as f_old,\ open('file_new','w',encoding='utf-8') as f_new: for line in f_old: line = line.replace('wukong','meihouwang') f_new.write(line) os.remove('file_old') os.rename('file_new','file_old')
1. 文件a.txt內容:每一行內容分別爲商品名字,價錢,個數,求出本次購物花費的總錢數 apple 10 3 tesla 100000 1 mac 3000 2 lenovo 30000 3 chicken 10 3 ''' # sum = 0 # with open('a.txt','r',encoding='utf-8') as f: # for line in f: # m1 = int(line.split()[1])*int(line.split()[2]) # sum += m1 # print(sum)