數據類型、字符編碼、文件處理

數據類型:

數字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)
文件練習2
相關文章
相關標籤/搜索