[004]Python數據類型二_python_全棧基礎

您好!此筆記的文本和代碼以網盤形式分享於文末!

因個人能力有限,錯誤處歡迎大家交流和指正!基礎部分內容簡單,但多且零散!

Python數據類型二
1、數字(int、float、complex)數字數據類型用於存儲數值,數字類型是不允許改變的,
      改變數值需重新分配內存空間
int:整型,正或負整數
float:浮點型,由整數部分與小數部分組成
complex:複數,由實數部分和虛數部分構成,複數的實部和虛部都是浮點型
用法 栗子 結果
十六進制和八進制 a = 0x0F  # 十六進制
b = 0o17  # 八進制
print(a, b)
15  15
.bit_length() # int類型 轉換爲二進制的至少有效位數
a = 1
b = 2
c = 4
d = 8
e = 15
print(a.bit_length(), b.bit_length(), c.bit_length(), d.bit_length(), e.bit_length())
1 2 3 4 4
數字類型轉換 x = 18
y = 2
z = 19.535
p = 19.435
print(int(z), int(p), float(x), complex(x), complex(x, y))
19 19 18.0 (18+0j) (18+2j)
2、布爾值(bool)布爾值僅有Ture和False兩種;反應條件的正確與否,  
用法 栗子 結果
int ---> bool # 非零即True,零即False
a = 100
b = 0
print(bool(a), bool(b))
True False
bool ---> int # True就是1,False就是零
a = True
b = False
print(int(a), int(b))
1 0
str ---> bool # 非空即True 空即False
s1 = 'trglion'
s2 = ''
print(bool(s1), bool(s2))
True False
bool ---> str a = True
b = False
c = str(a)
d = str(b)
print(a, c, b, d, type(a), type(c))
True True False False
<class 'bool'> <class 'str'>
int ---> str a = 108
b = str(a)
print(a, b, type(a), type(b))
108 108
<class 'int'> <class 'str'>
str ---> int # 必須是數字組成的字符串才能轉換
s1 = '109'
b = int(s1)
print(s1, b, type(s1), type(b))
109 109
<class 'str'> <class 'int'>
3、字符串(str) 用引號引起來的數據可以稱爲字符串類型,存儲少量數據,
      組成字符串的每個元素稱之爲字符
用法 栗子 結果
索引 # 索引,下標從0開始
# s1 = 'six六6' 共有5個字符
s1 = 'six六6'
print(s1[0], s1[2], s1[-1], s1[-2])
s x 6 六
切片 # 切片,截取一段字符串成新字符串
# 取值範圍: a =< x < b
s1 = 'six六6777seven7七666'
print(s1[:5])  # 從零開始可不寫
print(s1[2:5], s1[:], s1[:-1])
print(s1[0:6:3])  # 其中3爲間隔字符步長
print(s1[-1:-7:-2])  # 其中-2 爲反向步長
# 避免s1[:7:-3]、s1[-1:-5]、s1[-1:0]、s1[-1:-7:3]等這些形式
six六6
x六6
six六6777seven7七666
six六6777seven7七66
s六
667
僅首字母大寫
.capitalize()
s2 = s1.capitalize()
print(s2)
Six六6777seven7七666
字母全部大寫
.upper()
s2 = s1.upper()
print(s2)
SIX六6777SEVEN7七666
字母全部小寫
.lower()
s3 = "sixSEVENSIX"
s2 = s3.lower()
print(s2)
sixsevensix
字母大小寫翻轉
.swapcase()
s2 = s3.swapcase()
print(s2)
SIXsevensix
標題模式
.title()
# 標題方式,單詞首字母大寫
s4 = "disc on the app of multi"
s2 = s4.title()
print(s2)
Disc On The App Of Multi
居中,自動填充
.center()
s5 = "trglion"
s2 = s5.center(20, "*")  # 20爲總字符個數
print(s2)
******trglion*******
是否僅有數字組成
.isdigit()
ret1 = s1.isdigit()
print(ret1)
FALSE
是否僅字母組成
.isalpha()
ret1 = s1.isalpha()
print(ret1)
FALSE
字符數
len()
# 字符串的字符數
a = len(s1)
print(a)
18
某元素的個數
.count()
# 字符串中元素出現的個數
ret1 = s1.count("e")
ret2 = s1.count("e", 0, 10)
ret3 = s1.count("e", -1, -10)   # 不要使用這種格式
print(ret1, ret2, ret3)
2 1 0
否以…開頭或結尾
.startswith()
.endswith()
# 判斷字符串是否以…開頭或結尾
ret1 = s1.startswith("si")
ret2 = s1.endswith("666")
ret3 = s1.endswith("666", 10, 17)  # 切片的取值範圍
print(ret1, ret2, ret3)
True True False
切分
以…爲分割爲一個列表
.split()
# 以…爲分割且形成一個列表
ret1 = s1.split("6")
ret2 = s1.split("6", 1)  # 其中1爲分割次數
ret3 = s1.split("6", 2)
ret4 = s1.split("6", 3)
ret5 = s1.split("6", 3)[0]
print(ret1, type(ret1))
print(ret2)
print(ret3)
print(ret4)
print(ret5, type(ret5))
['six六', '777seven7七', '', '', ''] <class 'list'>
['six六', '777seven7七666']
['six六', '777seven7七', '66']
['six六', '777seven7七', '', '6']
six六 <class 'str'>
查找元素
.find()
# 查找元素,返回索引,找不到返回-1
a = s1.find("s")
b = s1.find("A")
print(a, b, type(a), type(b))
0 -1 <class 'int'> <class 'int'>
查找元素
.find()
# 查找元素,返回索引,找不到報錯
a = s1.index("s")
print(a, type(a))
0 <class 'int'>
去除指定字符
.strip()
# strip 默認去除字符串首尾空格
# 去除指定字符,
s6 = "   x  567  x     "
s7 = "six666SEVEN77si"
s2 = s6.strip()
sa = s7.strip("7")
sb = s7.strip("6")
sc = s7.strip("si")
se = s7.rstrip("si")  # 自左刪除
sd = s7.lstrip("si")  # 自右刪除
print(s2, sa, sb, sc, se, sd)
x  567  x
six666SEVEN77si
six666SEVEN77si
x666SEVEN77
six666SEVEN77
x666SEVEN77si
替換相關字符
.replace(old,new,count) 
sa = s1.replace("6", "8", 1)
sb = s1.replace("6", "8", 2)
sc = s1.replace("6", "8", 5)
print(sa, sb, sc)
six六8777seven7七666
six六8777seven7七866
six六8777seven7七888
格式化輸出
format
這幾個字符串輸出的內容是一樣的
sx = "我是{},我在{},我學{}, I am {}".format("trglion", "上海", "python", "trglion")
sy = "我是{0},我在{1},我學{2}, I am {0}".format("trglion", "上海", "python")
sz = "我是{name},我在{city},我學{tech}, I am {name}".format(name="trglion", city="上海", tech="python")
name = input('請輸入名字:')
sn = "我是{name},我在{city},我學{tech}, I am {name}".format(name=name, city="上海", tech="python")
print(sx, sy, sz, sn)
我是trglion,我在上海,我學python, I am trglion
4、列表(list) 屬於容器類的數據類型,可以存儲稍大量的數據
用法 栗子 結果
創建列表 li = [123, "trglion", "天涯社區", [1, 'abs', '小明13歲'], "Lilei12"]  
索引 l1 = li[0]
l2 = li[3]
l3 = li[3][2]
print(l1, type(l1))
print(l2, type(l2))
print(l3, type(l3))
123 <class 'int'>
[1, 'abs', '小明13歲'] <class 'list'>
小明13歲 <class 'str'>
切片 l1 = li[0:3]
l2 = li[0:6:2]
l3 = li[-1:-6:-2]
print(l1, l2, l3)
[123, 'trglion', '天涯社區']
[123, '天涯社區', 'Lilei12']
['Lilei12', '天涯社區', 123]
追加
.append
在最後追加元素
li.append(456)
li.append([7, '1a'])
print(li)
[123, 'trglion', '天涯社區', [1, 'abs', '小明13歲'], 'Lilei12', 456, [7, '1a']]
迭代追加
.extend
在最後迭代追加元素
li.extend(["8e", [1, '9F']])
li.extend("王7D")
print(li)
[123, 'trglion', '天涯社區', [1, 'abs', '小明13歲'], 'Lilei12', '8e', [1, '9F'], '王', '7', 'D']
插入
.insert
在任意位置插入元素
li.insert(2, '2c')
print(li)
[123, 'trglion', '2c', '天涯社區', [1, 'abs', '小明13歲'], 'Lilei12']
刪除
.pop
通過索引刪除
並返回被刪除元素
ret = li.pop(2)
print(ret, li)
天涯社區
 [123, 'trglion', [1, 'abs', '小明13歲'], 'Lilei12']
刪除.
.remove
通過元素刪除
無此元素則報錯
li.remove(123)
li.remove("Lilei12")
print(li)
['trglion', '天涯社區', [1, 'abs', '小明13歲']]
清空列表
clear
li.clear()
print(li, type(li))
[] <class 'list'>
索引刪除
不能刪除li[3]中的元素
del li[3]
print(li)
[123, 'trglion', '天涯社區', 'Lilei12']
切片刪除 del li[0:2]
print(li)
['天涯社區', [1, 'abs', '小明13歲'], 'Lilei12']
切片(步長)刪除 del li[::2]
print(li)
['trglion', [1, 'abs', '小明13歲']]

按索引改
li[1] = "tianya"
print(li)
[123, 'tianya', '天涯社區', [1, 'abs', '小明13歲'], 'Lilei12']

按切片改
li[1:3] = "王7De[2,c]"
print(li)
[123, '王', '7', 'D', 'e', '[', '2', ',', 'c', ']', [1, 'abs', '小明13歲'], 'Lilei12']

按照切片(步長)
必須一一對應
li[::2] = "對應值"
print(li)
['對', 'trglion', '應', [1, 'abs', '小明13歲'], '值']

切片和 循環
for i in li:
    print(i)
print(li[0:2])
123
trglion
天涯社區
[1, 'abs', '小明13歲']
Lilei12
[123, 'trglion']
查看元素的個數
len()

ret = len(li)
print(ret)
5
 
淺拷貝
.copy
l1 = li.copy()
print(l1)
[123, 'trglion', '天涯社區', [1, 'abs', '小明13歲'], 'Lilei12']
查看某個元素出現次數
.count
print(li.count("i"))
l1 = ['t', 'r', 'g', 'l', 'i', 'o', 'n']
print(l1.count("i"))
0
1
找出某元素的索引
無此元素則報錯
.index
ret = li.index(123)
ret1 = li.index("trglion")
print(ret, ret1)
0 1
排序
正向排序
僅適字符串和整型元素
l1 = ['c', 'f', 'b', 'a', 'e', 'dog']
l1.sort()
print(l1)
l2 = [1, 0, 8, 9, 10, 7]
l2.sort()
print(l2)

['a', 'b', 'c', 'dog', 'e', 'f']
[0, 1, 7, 8, 9, 10]
倒序
reverse = True
l2 = [1, 0, 8, 9, 10, 7]
l2.sort(reverse=True)
print(l2)
[10, 9, 8, 7, 1, 0]
反轉
.reverse
l2 = [1, 0, 8, 9, 10, 7]
l2.reverse()
print(l2)
[7, 10, 9, 8, 0, 1]
列表的相乘和相加 l1 = [1, 'a']
l2 = [5, 'b', [2, '3C']]
print(l1+l2)
print(l2+l1)
print(l1*3)
[1, 'a', 5, 'b', [2, '3C']]
[5, 'b', [2, '3C'], 1, 'a']
[1, 'a', 1, 'a', 1, 'a']
列表的嵌套 print(li[1][2])
li[1] = li[1].capitalize()
print(li)
print(li[2].replace("社區", "論壇"))
print(li)
li[2] = li[2].replace("社區", "論壇")
print(li)
li[3][1] = li[3][1].upper()
print(li)
g
[123, 'Trglion', '天涯社區', [1, 'abs', '小明13歲'], 'Lilei12']
天涯論壇
[123, 'Trglion', '天涯社區', [1, 'abs', '小明13歲'], 'Lilei12']
[123, 'Trglion', '天涯論壇', [1, 'abs', '小明13歲'], 'Lilei12']
[123, 'Trglion', '天涯論壇', [1, 'ABS', '小明13歲'], 'Lilei12']
字符串與列表 s = 'lion'
s1 = 'trg'.join(s)
print(s1)
li = ["123", 'tan', "天Ya5"]
s2 = '++'.join(li)
print(s2)
ltrgitrgotrgn
123++tan++天Ya5
5、元組 tuple:容器類的數據類型,存儲稍大量的數據,是元素不可增刪改的列表,
                          元素不可以改,但是元素的“元素(非元組)”可以修改
用法 栗子 結果
元組的創建 tu = (123, "Lion", "4R9f6e", [1, 'LeeLei', '3c6E'], 'Lion')  
索引 print(tu[0], type(tu[0]))
print(tu[1][2], type(tu[1][2]))
print(tu[2][0], type(tu[2][0]))
print(tu[2][1], type(tu[2][1]))
123 <class 'int'>
o <class 'str'>
4 <class 'str'>
R <class 'str'>
切片 print(tu[0:3])
print(tu[::2])
print(tu[::-2])
(123, 'Lion', '4R9f6e')
(123, '4R9f6e', 'Lion')
('Lion', '4R9f6e', 123)
循環 for i in tu:
    print(i)
123
Lion
4R9f6e
[1, 'LeeLei', '3c6E']
Lion
查找元素索引
.index
ret = tu.index(123)
ret1 = tu.index("Lion")
print(ret, ret1)
0 1
查找元素的出現次數
.count
tu = (123, "Lion", "3c6E", [1, 'LeeLei', '3c6E'], 'Lion')
ret = tu.count("3c6E")
ret1 = tu.count('Lion')
print(ret, ret1)
1 2
查看元素的個數
len()
print(len(tu)) 5
 
元素的“元素”可變 tu[3][1] = tu[3][1].upper()
print(tu)
tu[3].append("Trg")
print(tu)
(123, 'Lion', '3c6E', [1, 'LEELEI', '3c6E'], 'Lion')
(123, 'Lion', '3c6E', [1, 'LEELEI', '3c6E', 'Trg'], 'Lion')
6、字典dict:容器型的數據類型,按照鍵值對的方式存儲關係型數據,其中key是不可變數據類型,
                       且唯一不可重複;Value任意數據,py3.6後字典爲第一次插入的順序。
不可變(可哈希)的數據類型:int,str,bool,tuple。可變(不可哈希)的數據類型:list,dict,set。
用法 栗子 結果
字典的創建 dic = {'name': 'Lion', 'age': '8', 'sex': 'Male'}  

鍵值對直接增加
無則增加,有則變值
dic['weight'] = 300
dic['age'] = 9
print(dic)
{'name': 'Lion', 'age': 9, 'sex': 'Male', 'weight': 300}

.setdefault
無則增加,有則不動作
dic.setdefault('weight', '300')
dic.setdefault('age', '9')
ret = dic.setdefault('age')
print(dic, ret)
{'name': 'Lion', 'age': '8', 'sex': 'Male', 'weight': '300'}
8

.pop
刪除相應鍵值對,
返回鍵值對的值;
無鍵值對則無動作,
可設置返回值
ret1 = dic.pop('name')
print(ret1, dic)
ret2 = dic.pop('n', None)
print(ret2, dic)
ret3 = dic.pop('age', None)
print(ret3, dic)
Lion {'age': '8', 'sex': 'Male'}
None {'age': '8', 'sex': 'Male'}
8 {'sex': 'Male'}

.popitem
py3.6後爲刪除最後一個
有返回值
ret1 = dic.popitem()
print(ret1, type(ret1), dic)
('sex', 'Male') <class 'tuple'> {'name': 'Lion', 'age': '8'}

del
無保留刪除
del dic['name']
print(dic)
del dic  # 將字典無保留刪除
# print(dic)  # 報錯
{'age': '8', 'sex': 'Male'}

.clear
清空字典
dic.clear()
print(dic)
{}

通過鍵值對改值
dic['age'] = 7
print(dic)
{'name': 'Lion', 'age': 7, 'sex': 'Male'}

.update
字典升級
dic.update(sex='Female', height='100')
print(dic)
dic.update([('sex', '男'), ('weight', '300')])
print(dic)
dic1 = {'age': '6', 'sex': 'Male', 'color': 'brown'}
dic.update(dic1)
print(dic)
{'name': 'Lion', 'age': '8', 'sex': 'Female', 'height': '100'}
{'name': 'Lion', 'age': '8', 'sex': '男', 'height': '100', 'weight': '300'}
{'name': 'Lion', 'age': '6', 'sex': 'Male', 'height': '100', 'weight': '300', 'color': 'brown'}

查看字典的鍵、值、
鍵和值;
print(dic.keys(), type(dic.keys()))
print(dic.values())
print(dic.items())
dict_keys(['name', 'age', 'sex']) <class 'dict_keys'>
dict_values(['Lion', '8', 'Male'])
dict_items([('name', 'Lion'), ('age', '8'), ('sex', 'Male')])
查看鍵和值 for k, v in dic.items():
    print(k, v)
name Lion
age 8
sex Male
查看鍵和值
以元組形式
for i in dic.items():
    print(i)
('name', 'Lion')
('age', '8')
('sex', 'Male')

通過鍵查詢,
無此鍵則報錯
v = dic['name']
print(v)
Lion

.get
可設置返回值
print(dic.get('sex'))
v = dic.get('age')
print(v)
v1 = dic.get('name')
print(v1)
v2 = dic.get('name1')
print(v2)
v3 = dic.get('name2', '無此名')
print(v3)
Male
8
Lion
None
無此名
創建字典
.fromkeys
dic1 = dict.fromkeys('abcd', 'Lion')
print(dic1)
dic2 = dict.fromkeys([1, 2, 3, 4], 'Lion')
print(dic2)
{'a': 'Lion', 'b': 'Lion', 'c': 'Lion', 'd': 'Lion'}
{1: 'Lion', 2: 'Lion', 3: 'Lion', 4: 'Lion'}
字典的嵌套
1、獲取獅王第一個孩子的名字
2、添加獅王的第三個孩子的信息
dic1 = {
    'name': 'LionKing',
    'age': '7',
    'children': [{'first': 'XiaoMing', 'age': '3', }, {'second': 'XiaoHong', 'sex': 'Female'}]
}

v1 = dic1['children']
print(v1, type(v1))
v2 = dic1['children'][0]
print(v2, type(v2))
first_name = dic1['children'][0]['first']
print(first_name, type(first_name))
dic1['children'].append({'three': 'XiaoDong', 'weight': '200'})
print(dic1)
[{'first': 'XiaoMing', 'age': '3'}, {'second': 'XiaoHong', 'sex': 'Female'}] <class 'list'>
{'first': 'XiaoMing', 'age': '3'} <class 'dict'>
XiaoMing <class 'str'>
{'name': 'LionKing', 'age': '7', 'children': [{'first': 'XiaoMing', 'age': '3'}, {'second': 'XiaoHong', 'sex': 'Female'}, {'three': 'XiaoDong', 'weight': '200'}]}
7、集合set:可變的數據類型,但元素必須是不可變的數據類型, 無序、不可重複
不可變(可哈希)的數據類型:int,str,bool,tuple;元組內不可出現可變數據類型的元素
用法 栗子 結果
創建集合 set1 = {1, 'Ab3', True, }  

.add
set1.add(123)
set1.add('獅王')
set1.add(('ghs', 123, ))
print(set1)
{False, 1, '獅王', ('ghs', 123), 123, 'Ab3'}

.update
迭代增加,
參數爲可迭代對象
# set1.update(123)  #錯誤的
set1.update('獅王')
set1.update(('ghs', 123, ))
set1.update([1, 8, 9])
set1.update({'d': 3, 'e': 'f', })
print(set1)
{False, 1, 'Ab3', 'ghs', 8, 9, 123, 'd', 'e', '王', '獅'}

.remove
刪除一個元素,
無則報錯
set1.remove('Ab3')
print(set1)
{False, 1}

.pop
隨機刪除一個元素
set1.pop()
print(set1)
{1, 'Ab3'}

.clear
清空集合
set1.clear()
print(set1)
set()

del
無保留刪除
del set1
print(set1)
報錯 not defined
集合的其他操作 set2 = {1, 2, 3, 'a', 'b', }
set3 = {3, 4, 'a', 'c', 'd', }
set4 = {1, 2, 3, }
set5 = {1, 2, 3, 'a', 'b', }
 
集合的交集
&
intersection
print(set2 & set3)
print(set2.intersection(set3))

{3, 'a'}
{3, 'a'}
集合的並集
|
union
print(set2 | set3)
print(set2.union(set3))
{1, 2, 3, 4, 'a', 'b', 'c', 'd'}
{1, 2, 3, 4, 'a', 'b', 'c', 'd'}
集合的差集
-
difference
print(set2 - set3)
print(set3.difference(set2))
{1, 2, 'b'}
{'c', 4, 'd'}
集合的反交集
^
symmetric_difference
print(set2 ^ set3)
print(set3.symmetric_difference(set2))
set2.symmetric_difference_update(set3)
print(set2)
{1, 2, 4, 'd', 'b', 'c'}
{1, 2, 4, 'd', 'b', 'c'}
{1, 2, 4, 'b', 'd', 'c'}
集合的子集
<
.issubset
print(set4 < set2)
print(set2.issubset(set4))
True
False
集合的超集
>
.issuperset
print(set2 > set4)
print(set5 > set2)
print(set4.issuperset(set4))
True
False
True
不可變集合
forzenset 
set6 = frozenset({1, 2, 3, })
print(set6)
s1 = frozenset([1, 2, 'aB3'])
print(s1)
s2 = frozenset({'a': 1, 'b': 2, })
print(s2)
frozenset({1, 2, 3})
frozenset({1, 2, 'aB3'})
frozenset({'a', 'b'})
8、其他
enumerate:枚舉,對於一個可迭代的(iterable)/可遍歷的對象(如列表、字符串),
enumerate將其組成一個索引序列,利用它可以同時獲得索引和值
用法 栗子 結果
  li = [1, '23', 'a3B4', 'Lion', '獅王']  
  for i in enumerate(li):
    print(i, type(i))
(0, 1) <class 'tuple'>
(1, '23') <class 'tuple'>
(2, 'a3B4') <class 'tuple'>
(3, 'Lion') <class 'tuple'>
(4, '獅王') <class 'tuple'>
  for index, nam in enumerate(li, 0):
    print(index, nam)
0 1
1 23
2 a3B4
3 Lion
4 獅王
  for index, nam in enumerate(li, 50):
    print(index, nam)

50 1
51 23
52 a3B4
53 Lion
54 獅王
range:指定範圍,生成指定數字
用法 栗子 結果
  for i in range(1, 7):
    print(i)
1
2
3
4
5
6
指定步長 for i in range(1, 7, 2):
    print(i)
1
3
5
反向步長 for i in range(7, 1, -2):
    print(i)
7
5
3
Python運算符的優先級
優先級 運算符 描述
1 lambda Lambda表達式
2 or 布爾“或”
3 and 布爾“與”
4 not x 布爾“非”
5 in,not in 成員測試
6 is,is not 同一性測試
7 <,<=,>,>=,!=,== 比較
8 | 按位或
9 ^ 按位異或
10 & 按位與
11 <<,>> 移位
12 +,- 加法與減法
13 *,/,% 乘法、除法與取餘
14 +x,-x 正負號
15 ~x 按位翻轉
16 ** 指數
17 x.attribute 屬性參考
18 x[index] 下標
19 x[index:index] 尋址段
20 f(arguments...) 函數調用
21 (experession,...) 綁定或元組顯示
22 [expression,...] 列表顯示
23 {key:datum,...} 字典顯示
24 'expression,...' 字符串轉換
Python小數據池和深淺拷貝
副標題:“你以爲你把數據備份好了!”
1、bytes類型:py3後以Unicode編碼方式存儲,bytes的編碼方式爲非Unicode
用法 栗子 結果
編碼
.encode
把str轉換成bytes,
unicode轉換成
utf-8或gbk
s1 = 'sun'
s2 = '太陽'
print(s1.encode('utf-8'))
print(s2.encode('utf-8'))
print(s1.encode('gbk'))
print(s2.encode('gbk'))
b'sun'
b'\xe5\xa4\xaa\xe9\x98\xb3'
b'sun'
b'\xcc\xab\xd1\xf4'
解碼
.decode
把bytes,utf-8
轉換成unicode
s3 = s1.encode()
s4 = s2.encode()
s5 = s2.encode('gbk')

print(s3)
print(s3.decode('utf-8'))
print(s3.decode('gbk'))
print(s4)
print(s4.decode('utf-8'))
print(s5)
print(s5.decode('gbk'))
b'sun'
sun
sun
b'\xe5\xa4\xaa\xe9\x98\xb3'
太陽
b'\xcc\xab\xd1\xf4'
太陽
2、代碼塊:塊是一個python程序的文本,他是作爲一個單元執行的,一個模塊,
                     一個函數,一個類,一個文件等都是一個代碼塊
補充id  is  == : id就是內存地址,is是比較對象的內存地址,==比較對象的值
代碼塊緩存機制:在同一代碼塊內,執行初始化對象時會將其內的“變量”和“值”存儲在一個字典中
                            如果兩個變量值相同,則指向1個對象
所以滿足緩存機制則他們在內存中只存在一個,即:id相同。適用對象: int(float),str,bool。
優點:值相同的字符串和整數,直接從“字典”取出,避免重複的創建和銷燬,提升效率節約內存
用法 栗子 結果
整型 a = 55
b = 55
print(a is b)
True
浮點 c = 63.57
d = 63.57
print(c is d)
True
非乘法字符串 s1 = 'Lion$~'
s2 = 'Lion$~'
print(s1 is s2)
True
乘法字符串,
僅含大小寫字母、數字
下劃線;
相乘後總長度<=20
s3 = 'Ab6_' * 5
s4 = 'Ab6_' * 5
print(s3 is s4)
s5 = 'Ab6_' * 6
s6 = 'Ab6_' * 6
print(s5 is s6)
True
False
3、小數據池:不同代碼塊的緩存機制,爲節省內存,適用對象:int、str、bool;
                        兩個值相同的變量指向小數據池裏的同一地址,整數數字範圍-5~256。
補充:在cmd進入python解釋器稱爲交互方式,交互方式下輸入的每個指令都是一個代碼塊
用法 栗子 結果
整型
 
     
 
字符串
字符串長度<=1時,
默認駐留
 
     
 
字符串
字符串長度>1時,
僅含字母、數字、下劃線
默認駐留
乘法字符串
乘 <= 1 時
默認駐留
乘法字符串
乘數>1時,
僅含字母、數字、下劃線
總長度<=20 時
默認駐留
 
     
 
指定駐留
from sys import intern
4、深淺拷貝(你以爲你把數據備份好了)
淺拷貝:數據半共享,複製的數據獨立存放在其他內存中,但是隻複製第一層。
      如果是列表等可變數據類型,拷貝的是內存地址,所以修改這類元素,還是會全都改變。
深拷貝:數據完全不共享,複製的數據完全獨立放到另一個內存中,包括可變數據類型的內容
用法 栗子 結果
淺拷貝
.copy
數據半共享
li1 = [1, 3, [5, 6]]
li2 = li1.copy()
li1[1] = 4
print(li1)
print(li2)
li1[2][0] = 7
li2[2][1] = 8
print(li1)
print(li2)
[1, 4, [5, 6]]
[1, 3, [5, 6]]
[1, 4, [7, 8]]
[1, 3, [7, 8]]
深拷貝
copy.deepcopy
數據完全不共享
import   copy
li1 = [1, 3, [5, 6]]
li2 = copy.deepcopy(li1)
li1[1] = 4
print(li1)
print(li2)
li1[2][0] = 7
li2[2][1] = 8
print(li1)
print(li2)
[1, 4, [5, 6]]
[1, 3, [5, 6]]
[1, 4, [7, 6]]
[1, 3, [5, 8]]
python文件處理
1、文件操作的方法
方法 用法 栗子 結果
打開文件
open()
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
file: 必需,文件路徑(相對或者絕對路徑)mode: 可選,文件打開模式
buffering: 設置緩衝
encoding: 一般使用utf8
errors: 報錯級別
newline: 區分換行符
closefd: 傳入的file參數類型
r模式打開文件:只讀模式
f = open('E:\Lion獅王.txt', mode='r', encoding='utf-8')
rb模式:二進制打開文件只讀,操作非文字文件
w模式:寫模式
wb模式:二進制格式寫入,操作圖片、音頻、視頻等
a模式:追加模式,最後位置追加內容
r+模式:用於文件的讀寫,默認光標在開頭
               先讀後寫,避免寫入覆蓋原有內容。
 
.close()
關閉文件
.close()
無參數
該方法無返回值
f = open('E:\Lion獅王.txt', mode='r', encoding='utf-8')
print("文件名:", f.name)

f.close()
文件名: E:\Lion獅王.txt
flush()
主動將緩衝區數據立即寫入文件
.flush()
無參數
該方法無返回值
f = open('E:\Lion獅王.txt', mode='r', encoding='utf-8')
print("文件名:", f.name)

f.flush()
f.close()        (栗子不好)
文件名: E:\Lion獅王.txt
.fileno()
返回文件描述符
.fileno()
無參數
返回整型文件描述符
f = open('E:\Lion獅王.txt', mode='r', encoding='utf-8')
print("文件名:", f.name)

fid = f.fileno()
print("文件描述符:", fid)

f.close()
文件名: E:\Lion獅王.txt
文件描述符: 3
.isatty()
是否連接到終端
..isatty()
無參數
如果連接到一個終端設備返回 True,
否則返回 False。
f = open('E:\Lion獅王.txt', mode='r', encoding='utf-8')
print("文件名:", f.name)

ret = f.isatty()
print("已連接其它終端:", ret)

f.close()
文件名: E:\Lion獅王.txt
已連接其它終端: False
.read()
讀取文件
.read([size])
[size]: 設定從文件讀取的字節數
f = open('E:\Lion獅王.txt', mode='r', encoding='gbk')

lin1 = f.read(6)
print("讀取的內容爲:%s" % (lin1))
lin2 = f.read()
print("讀取的內容爲:%s" % (lin2))

f.close()
(注意第二次的開始位置)
讀取的內容爲:a1A!&獅
讀取的內容爲:王^
第二行
第三行
第四行
.readline()
讀取整行
包含‘\n’字符
.readline([size])
[size]: 設定從文件讀取的字節數
f = open('E:\Lion獅王.txt', mode='r', encoding='gbk')

lin1 = f.readline()
print("讀內容爲:%s" % (lin1))
lin2 = f.readline(2)
print("讀內容爲:%s" % (lin2))
lin3 = f.readline(15)
print("讀內容爲:%s" % (lin3))

f.close()
讀內容爲:a1A!&獅王^

讀內容爲:第二
讀內容爲:行
.readlines()
讀取所有行,
並返回列表
.readlines
無參數
返回列表,包括所有行
f = open('E:\Lion獅王.txt', mode='r', encoding='gbk')

# lin1 = f.readlines()
# print("結果爲:%s" % (lin1))
# # 結果爲:['a1A!&獅王^\n', '第二行\n', '第三行\n', '第四行']
for line in f.readlines():
    line = line.strip()  # 去掉每行頭尾空白
    print("讀內容爲: %s" % (line))

f.close()
讀內容爲: a1A!&獅王^
讀內容爲: 第二行
讀內容爲: 第三行
讀內容爲: 第四行
.seek()
設置光標的位置
seek(self, offset: int, whence: int = 0)
offset: 開始的偏移量,負數爲倒數第幾位;
whence:默認爲0,從哪個位置開始偏移;
0代表從頭,1代表當前位置,2代表文末
返回值:操作成功返回新的位置,
操作失敗則返回-1
f = open('E:\Lion獅王.txt', mode='r', encoding='gbk')

lin1 = f.readlines()
print("結果爲:%s" % (lin1))

f.seek(0, 0)

for line in f.readlines():
    line = line.strip()  # 去掉每行頭尾空白
    print("讀內容爲: %s" % (line))

f.close()
結果爲:['a1A!&獅王^\n', '第二行\n', '第三行\n', '第四行']
讀內容爲: a1A!&獅王^
讀內容爲: 第二行
讀內容爲: 第三行
讀內容爲: 第四行
.tell()
返回文件當前位置
.tell()
無參數
返回文件的當前位置
f = open('E:\Lion獅王.txt', mode='r', encoding='gbk')

lin1 = f.readline()
print("結果爲:%s" % (lin1))

pos = f.tell()
print("當前位置:%d" % pos)

f.close()
結果爲:a1A!&獅王^

當前位置:12
.truncate()
截取
truncate( [ size ])
從文件的首行首字符開始截斷,
截斷文件爲 size 個字符;
 Widnows 系統下的換行代表2個字符大小
參數可選
無返回值
f = open('E:\Lion獅王.txt', mode='r+', encoding='gbk')

f.truncate(20)
s1 = f.read()
print("讀取爲:%s" % s1)

f.close()
讀取爲:a1A!&獅王^
第二行
.write()
寫入
返回寫入字符長度
.write( [ str ])
[str]  要寫入的字符串
返回寫入的字符長度
f = open('E:\Lion獅王.txt', mode='r+', encoding='gbk')

s1 = '第五行%……&^&'
f.seek(0, 2)
ret1 = f.write(s1)
print('寫入字符長度: %d' % ret1)

f.seek(0, 0)
lin1 = f.read()
print('讀內容爲:%s' % lin1)

f.close()
寫入字符長度: 9
讀內容爲:a1A!&獅王^
第二行
第五行%……&^&
.writelines()
寫入
系列字符串列表
.writelines( [ str ])
[str]  要寫入的字符串序列
無返回值
f = open('E:\Lion獅王.txt', mode='r+', encoding='gbk')

f.seek(0, 2)
sli1 = ['第六行', 'ENDING']
f.writelines(sli1)

f.seek(0, 0)
lin1 = f.read()
print('讀內容爲:%s' % lin1)

f.close()
讀內容爲:a1A!&獅王^
第二行
第五行%……&^&
第六行ENDING
2、各種模式下的文件操作
方法 栗子 結果  
rb + wb 模式
複製圖片
# 第1步,將原圖片通過rb模式讀取出來
f = open('sexy1.png', mode='rb')
content = f.read()
f.close()
# 第2步,將讀取到的content數據寫入新的文件
f1 = open('sexy2.png', mode='wb')
f1.write(content)
f1.close()
得到另外一張新圖片  
W模式
無文件則創建文件
f = open('L1', encoding='utf-8', mode='w')
f.write('這是一次測試內容')
f.close()
創建了L1,且添加了內容  
W模式
文件存在
則先清空文件
f = open('L1', encoding='utf-8', mode='w')
f.write('第二次輸入內容')
f.flush()  # 強制保存
f.close()
文件內容僅剩第二次的輸入內容  
a 追加模式
無文件則創建文件
有則在文末追加
f = open('L1', encoding='utf-8', mode='a')
f.write('第三次輸入內容')
f.flush()  # 強制保存
f.close()
在文末追加了新寫入的內容  
r+模式
打開文件用於讀寫
寫讀後寫是保障
f = open('L1', encoding='utf-8', mode='r+')
content = f.read()
print(content)
f.write('模式R+寫入內容')
f.flush()
f.seek(0, 0)
con1 = f.read()
print(con1)

f.close()
第二次輸入內容第三次輸入內容
第二次輸入內容第三次輸入內容模式R+寫入內容
 
with 打開文件方式 with open('L1',encoding='utf-8') as f1, open('E:\Lion獅王.txt',encoding='gbk') as f2:
    s1 = f1.read()
    s2 = f2.read()
    print(s1)
    print(s2)
第二次輸入內容第三次輸入內容模式R+寫入內容
a1A!&獅王^
第二行
第五行%……&^&
第六行ENDING
 
文件的修改      

願有更多的朋友,在網頁筆記結構上分享更邏輯和易讀的形式:

鏈接:https://pan.baidu.com/s/1PaFbYL1sYoUcRj0xgm8W8Q 
提取碼:暫無

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章