1. 程式人生 > 實用技巧 >資料內建方法與python操作檔案(補)

資料內建方法與python操作檔案(補)

昨日內容回顧

運算子之邏輯運算

運算子之身份運算

運算子之成員運算

程式碼的縮排

流程控制之if判斷

if
elif
else
三個語句優先級別相同,只會同時滿足執行一個條件
# 成績評判系統
# 使用者登入判斷

流程控制之while迴圈

while 條件
	迴圈體
條件成立就會執行程式碼,
break
	借宿本層迴圈
continue
	結束本次迴圈
# 迴圈列印數字
# 使用者迴圈登入

流程控制之for迴圈

for 變數名 in 可迭代物件:(字串,列表,字典)
	迴圈體程式碼
依次取出可迭代物件中的每個元素,分別指向迴圈體程式碼
for迴圈不需要加結束條件,可迭代物件取完直接結束

range方法

range看成是可以幫助你殘生已退數的方法
range(10) 		#0123456789
range(1,10) 	#123456789
range(1,10,2)	#13579

資料型別的內建方法

int
float

針對字串
1.索引取值
2.切片取值
3.步長
4.統計長度
5.移除字串首尾特定字元

今日日內容概要

  • 資料型別內建方法之字串

  • 資料型別內建方法之列表

  • 資料型別內建方法之字典

  • 可變型別與不可變型別

  • 元組與集合

  • 字元編碼

  • 文字轉義

  • 檔案操作

  • 路勁

  • 作業

今日內容詳細

資料型別內建方法之字串

res='jason|123|read'
# 字串的切割操作(按照指定的子符切割資料)
'''當你看見字串裡面有固定的符號作為分隔符,那麼應該考慮切割'''
結果是一個列表
print(res.split('|'))

字串轉大小寫
res1 = ''
print(res1.upper())
print(res1.lower())

3.判斷字串是否是純數字
# res2 = input('res2>>>:')
# print(res2.isdigit())
4.判斷字串是否以什麼開頭或者結尾
# res3 = 'jason'
# print(res3.startswith('j'))  # True
# print(res3.startswith('a'))  # True
# print(res3.endswith('n'))  # True
# print(res3.endswith('b'))  # False
5.字串的格式化輸出
方式一:佔位符 %s %d
方式二:format
# print('my name is {} my age is {}'.format('jason', 18))
# 2.根據索引可以重複使用資料
# print('{0} my {0} name is {0} my {1} age is {1}'.format('jason', 18))
# 3.指名道姓的獲取資料
# print('{name} my name {age} is {name} my age is {age}'.format(name='jason', age=18))
# 6.替換字串
res4 = 'egon is NB NB NB NB egon egon egon'
# 將字串中的egon替換成jason(類似於word中的全域性替換)
print(res4.replace('egon', 'jason'))  # jason is NB NB NB NB jason jason jason
# 區域性替換
print(res4.replace('egon', 'tony', 1))  # tony is NB NB NB NB egon egon egon

資料型別內建方法之列表

l = [11, 22, 33, 44, 55, 66, 77]
1.索引取值
# print(l[0])
# print(l[-1])
# print(l[-2])
2.切片取值
# print(l[1:4])  # [22, 33, 44]
3.步長
# print(l[1:4:2])  # [22, 44]
4.統計長度(統計元素的個數)
# print(len(l))  # 7
5.新增資料(尾部追加)
# l.append(88)  # [11, 22, 33, 44, 55, 66, 77, 88]
# l.append([11,22])  # [11, 22, 33, 44, 55, 66, 77, 88, [11, 22]]
# print(l)
6.插入資料
# l.insert(0,888)  # (索引位置,資料)
# print(l)
7.擴充套件列表
# l1 = ['jason', 'tony', 'kevin']
# l.extend(l1)  # 內部原理就是for迴圈+append操作
# for i in l1:
#     l.append(i)
# print(l)
8.刪除列表元素
# l.remove(11)  # 指定元素
# l.pop()  # 尾部彈出元素
# del l[1]  # 通用的刪除資料方法
# print(l)
9.列表生成式(重要)
ll = ['jason', 'tony', 'tom', 'jerry']
# 需求:將列表中所有的人名後加上NB字尾生成一個新列表
# new_l = []
# # 迴圈獲取ll裡面每一個人名
# for name in ll:
#     # 在每個人名後拼接NB
#     new_name = name + 'NB'
#     # 新增到新的列表中
#     new_l.append(new_name)
# print(new_l)
# 一行程式碼解決上述需求
# new_l = [name + 'NB' for name in ll]  # 先for迴圈 在字串拼接 最後生成列表
# print(new_l)  # ['jasonNB', 'tonyNB', 'tomNB', 'jerryNB']
10 排序
l2 = [22, 66, 33, 55, 44, 99, 77, 88, 11]
# l2.sort()  # 預設是升序
# print(l2)  # [11, 22, 33, 44, 55, 66, 77, 88, 99]
l2.sort(reverse=True)  # 降序
print(l2)  # [99, 88, 77, 66, 55, 44, 33, 22, 11]

資料型別內建方法之字典

user_dict={}
1.按照Key取值
print=(user_dict['username'])
# 鍵不存在會直接報錯
print(user_dirt.get('username'))
# None(空)  鍵不存在不會報錯
2.統計鍵值對的個數
print(len(user_dict))
3.修改資料
user_dict['username'] = 'tony'
print(user_dict)  # {'username': 'tony', 'age': 18, 'hobbies': ['read', 'run', 'music']}
user_dict['password'] = 123 
# 將username鍵對應的值修改為tony,鍵存在的情況下修改,鍵不存在就直接新增
user_dict['']=''
4.刪除資料
user_dict.pop('username')
print(user_dict)
# 指定鍵 彈出對應的鍵值對資料

可變型別與不可變型別

可變型別:值改變,記憶體地址不變(列表,字典)
不可變型別:值改變,記憶體地址肯定變(整型,浮點型,字串)
# res = 'jason'
# print(id(res))
# res = res + 'NB'
# print(id(res),res)

l = [11, 22, 33]
print(id(l))
l.append(44)
print(id(l))
"""
如果不明白,那麼直接記憶即可
"""

元組與集合

元組內元素不能被修改,可以看做不可做修改的列表
t = (1,2,3)
1.索引取值
print(t[0])

集合內元素必須是不可變型別(數字,字串)
s = {1,2,3}
# 去重 集合內不可能存在重複的元素,自動去重
# 關係運算
f1 = {'jason', 'jerry', 'tom', 'owen'}
f2 = {'jason', 'kevin', 'oscar', 'jerry'}
# 求兩個人共同好友
print(f1 & f2)  # {'jerry', 'jason'}
# 求兩個人的所有好友
print(f1 | f2)  # {'jerry', 'owen', 'jason', 'kevin', 'oscar', 'tom'}
# 求某個人的獨有的好友
print(f1 - f2)  # {'tom', 'owen'}
print(f2 - f1)  # {'kevin', 'oscar'}
# 求兩個人各自獨有的好友
print(f1 ^ f2)  # {'tom', 'owen', 'oscar', 'kevin'}

字元編碼

字元編碼的發展史
字元編碼主要是用於研究檔案內部資料的儲存原理
1.一家獨大
	誕生於美國,美國人使用的是英文
    而計算機只認識01二進位制數,如何讓計算機能夠認識英文字元
    美國人發明了英文字元與數字對應的關係的標準
    ASCII碼
    對應了英文字元與數字和二進位制對應關係
    00000000 8bit=1bytes
    其實7位足夠表示所有的英文,多一位是為了後續擴充套件考慮

2.群雄割據
	其他國家的人也開始用計算機
	中國GBK
    	該編碼表記錄了中文字元,英文字母與數字的對應關係
    日本shift—JIS
    # 導致不同國家之間的計算機無法實現資料互動,編碼表不一樣
    
3.天下一統
	unicode萬國碼
    記錄了所有國家的字元與數字的對應關係
    使用unicode在儲存資料的事後統一都是採用2bytes儲存資料
    utf-8由此而生
    針對英文還是採用1bytes
    針對中文采用bytes
    
'''
我們目前使用文字檔案儲存資料時
預設就是utf-8
'''
# 應用
學習完字元表之後能夠解決檔案開啟之後亂碼的問題
	檔案之所以亂碼,是編碼表不同
我們解決亂碼的方式其實就是保住檔案在儲存和開啟的時候採用的是同一個編碼本即可

文字轉義

# 斜槓與字母的組合有時候會產生特殊意義
res = 'D:\project\nython\tachong'
print(res)
# 取消轉義
res1 = r'D:\project\nython\tachong'
print(res1)

檔案操作

通過python程式碼來操作檔案的讀寫過程

# 下面的寫法不推薦使用 因為每次open都需要close
# f = open(r'aaa.txt', 'r', encoding='utf8')
# print(f.read())  # 讀取檔案內容
# f.close()  # 關閉檔案
# 推薦使用with語法

# 只能開啟文字檔案
# with open(r'aaa.txt', 'r', encoding='utf8') as f:
#     print(f.read())  # 當with的子程式碼執行完畢之後會自動幫你呼叫close
# 開啟所有檔案
with open(r'D:\資料分析三期\linux基礎\day5\day5-昨日回顧、重定向、打包壓縮.mp4', 'rb') as f:
    for line in f:
        print(line)

路勁

路勁就是用來標識檔案位置的資訊
相對路勁
	需要有一個參考物

絕對路徑
	不需要參考物

作業

1.至少使用兩種方法完成列表中所有的人名全部變大寫
	ll = ['jason', 'tony', 'tom', 'jerry']
    ps:1.常規的for迴圈實現  2.列表生成式
2.複習本週所有的內容,整理出筆記
3.完成今日筆記書寫