python3.5------day3-數據結構(dict,file)

字典(dict)

字典的定義:python

    字典的形式是以key:values。{key1,values,key2,values}緩存

特性:app

一、能夠存放多個值ide

二、字典是無需的ui

三、字典的key是惟一,有去重功能google

key的定義規則:編碼

一、不可變的(數字,字符串,元組) 查看變量的內存爲位置id
二、字典是惟一的
三、
hash斷定是否可變

values定義:spa

    任意類型

建立一個字典:指針

方法1code

dict_1 = {'name':'zhangsan', 'age':22}

方法2:

# 方法2
dict4 = dict(name='zhangsan',age=22)
print(dict4)

方法3

# 方法3
dict5 = dict((('name','zhangsan'),('age',22)))
print(dict5)

方法4:

# 方法4
dict6 = dict({'name':'zhangsan','age':22})
print(dict6)
 

字典的增:

    若是字典中沒有對應的key,則增長,若是有對應的key,則覆蓋

#
dict_1 = {'name':'zhangsan', 'age':22}
print(dict_1)
dict_1['Sex'] = 'male'
print(dict_1)

字典的刪

# 刪除
dict_1 = {'name':'zhangsan', 'age':22}
# 刪除方法1
del dict_1['name']
print(dict_1)
結果:
{'age': 22}

# 刪除方法2:
dict_1.pop('name')
print(dict_1)
結果:
{'age': 22}

# 刪除方法3
dict_1.popitem()   # 屬於隨機刪除
print(dict_1)
結果:
{'age': 22}

字典的改

#
dict_1 = {'name':'zhangsan', 'age':22}
dict_1['name'] = 'lisi'
print(dict_1)

結果:
{'age': 22, 'name': 'lisi'}

字典的查

#
dict_1 = {'name':'zhangsan', 'age':22}
print(dict_1)
print(dict_1['name'])             #此種方法,若是key不存在,將會報錯,而get方法不存在不會報錯
print(dict_1.get('name'))
結果:
{'age': 22, 'name': 'zhangsan'}
zhangsan
zhangsan

字典的遍歷

dict_1 = {'name':'zhangsan', 'age':22}
# 方法1
for k in dict_1:
    print(k,dict_1[k])
# 方法2
for k, v in dict_1.items():
    print(k, v)

字典的其餘方法

# keys方法
dict_1 = {'name':'zhangsan', 'age':22}
print(dict_1.keys())

# 遍歷keys方法
for i in dict_1.keys():
    print(i)
# vaules方法
print(dict_1.values())
for i in dict_1.values():
    print(i)

# uptate方法
dict2 = {'key':1, 'key2':2}
dict_1.update(dict2)
print(dict_1)

# item方法
dict_1.items()
print(dict_1)

# formkeys方法,快速生成一個字典
dict3 = dict.fromkeys([1, 2, 3], 'keys')
print(dict3)

# setdefault方法
# 若是鍵在字典中,返回這個鍵所對應的值。若是鍵不在字典中,向字典 中插入這個鍵,而且以default爲這個鍵的值,並返回 default。default的默認值爲None
dict_1.setdefault("sex", "male")
print(dict_1)

三級菜單(精簡版)的實現

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '網易': {},
                'google': {}
            },
            '中關村': {
                '愛奇藝': {},
                '汽車之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龍觀': {},
        },
        '朝陽': {},
        '東城': {},
    },
    '上海': {
        '閔行': {
            "人民廣場": {
                '炸雞店': {}
            }
        },
        '閘北': {
            '火車戰': {
                '攜程': {}
            }
        },
        '浦東': {},
    },
    '山東': {},
}

run_level = menu
last_level = []
while True:
    for key in run_level:
        print(key)
    chose = input(">>").strip()
    if len(chose) == 0:
        continue
    elif chose == 'b':
        if len(chose) == 0:
            break
        run_level = last_level[-1]
        last_level.pop()
    elif chose == 'q':
        break
    elif chose not in run_level:
        continue
    last_level.append(run_level)
    run_level = run_level[chose]

深拷貝和淺拷貝

淺拷貝,只是拷貝到最第一層

dic1 = {'name': 'alex', 'age': '22', 'alex':['name','zhangsan','lisi']}
dic2 = dic1.copy()
print(dic1)
print(dic2)
dic2['alex'][0] = 'wangwu'
print(dic1)
print(dic2)

結果:
{'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi'], 'age': '22'}
{'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi'], 'age': '22'}
{'name': 'alex', 'alex': ['wangwu', 'zhangsan', 'lisi'], 'age': '22'}
{'name': 'alex', 'alex': ['wangwu', 'zhangsan', 'lisi'], 'age': '22'}
 
深拷貝
#
# 深拷貝須要用到copy模塊,
import copy
dic1 = {'name': 'alex', 'age': '22', 'alex':['name','zhangsan','lisi']}
dic2 = copy.deepcopy(dic1)
print(dic1)
print(dic2)
dic1['alex'][0] = 'wangwu'
print(dic1)
print(dic2)

結果:
{'age': '22', 'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi']}
{'age': '22', 'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi']}
{'age': '22', 'name': 'alex', 'alex': ['wangwu', 'zhangsan', 'lisi']}
{'age': '22', 'name': 'alex', 'alex': ['name', 'zhangsan', 'lisi']}

集合(set)

定義:由不一樣元素組成的集合,集合中是一組無序列的可hash值,能夠做爲字典的key

特性:

  集合的目的是將不一樣的值存放到一塊兒,不一樣的集合間用來作關係運算,無需糾結於集合中單個值

集合的建立

set = {1, 2, 3, 4, 5}
print(set)
print(type(set))
結果:
{1, 2, 3, 4, 5}
<class 'set'>

集合的經常使用方法:

set = {1, 2, 3, 4, 5}
print(set)
print(type(set))
結果:
{1, 2, 3, 4, 5}
<class 'set'>

set1 = {1, 2, 3, 4, 5}
set2 = {2, 3}

# 交集
print(set1 & set2)
# 結果:
{2, 3}
# 並集
print(set1 | set2)
# 結果:
{1, 2, 3, 4, 5}
# 差級
print(set1 - set2)
# 結果:
{1, 4, 5}
# 父級
print(set1 >= set2)
# 結果:
True
# 子集
print(set2 <= set1)
# 結果:
True
# 對稱差級
print(set1 ^ set2)
# 結果:
{1, 4, 5}
# 刪除
set1.pop()  #隨機刪除
print(set1)
# 結果:
{2, 3, 4, 5}
set1.remove(5)
print(set1)
# 結果:
{2, 3, 4}
set1.discard(6)
print(set1)
# pop()方法隨機刪除
# remove()參數,若是刪除的值不存在,報錯,必須指定一個參數
# discard(),若是刪除的值不存在,不會報錯,刪除事沒有返回值

# 斷定集合中是否有指定的值
if 'a' in set1:
    print("存在")
else:
    print("不存在")
#結果:
不存在

# 增長
set1.add("hello")
print(set1)
# 結果:
{2, 3, 4, 'hello'}
set1.update('abc')
print(set1)
# 結果:
{2, 3, 4, 'hello', 'c', 'b', 'a'}
 

集合的運算符

符號 意義 對應的集合方法
& 交集
intersection()
- 差級
difference()
| 並集
union()
>=,<= 父級,子集
issubset()
issuperset()
in  
not in 不在  
^ 對稱差級
symmetric_difference()

字符編碼

python編碼轉換

文件

對文件的操做流程

  一、打開文件,獲得文件句柄並賦值給一個變量

  二、經過文件句柄對文件進行操做

  三、關閉文件

現有文件以下:

Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
我戲弄生命 視其爲愚蠢的遊戲
The way the evening breeze
就如夜晚的微風
May tease the candle flame
逗弄蠟燭的火苗
The thousand dreams I dreamed
我曾千萬次夢見
The splendid things I planned
那些我計劃的絢麗藍圖
I always built to last on weak and shifting sand
但我老是將之建築在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白晝赤裸的陽光
And only now I see how the time ran away
事到現在我纔看清歲月是如何匆匆流逝
Yesterday when I was young
昨日當我年少輕狂
So many lovely songs were waiting to be sung
有那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
I ran so fast that time and youth at last ran out
我飛快地奔走 最終時光與青春消逝殆盡
I never stopped to think what life was all about
我從未停下腳步去思考生命的意義
And every conversation that I can now recall
現在回想起的全部對話
Concerned itself with me and nothing else at all
除了和我相關的 什麼都記不得了
The game of love I played with arrogance and pride
我用自負和傲慢玩着愛情的遊戲
And every flame I lit too quickly, quickly died
全部我點燃的火焰都熄滅得太快
The friends I made all somehow seemed to slip away
全部我交的朋友彷佛都不知不覺地離開了
And only now I'm left alone to end the play, yeah
只剩我一我的在臺上來結束這場鬧劇
Oh, yesterday when I was young
噢 昨日當我年少輕狂
So many, many songs were waiting to be sung
有那麼那麼多甜美的曲兒等我歌唱
So many wild pleasures lay in store for me
有那麼多肆意的快樂等我享受
And so much pain my eyes refused to see
還有那麼多痛苦 個人雙眼卻視而不見
There are so many songs in me that won't be sung
我有太多歌曲永遠不會被唱起
I feel the bitter taste of tears upon my tongue
我嚐到了舌尖淚水的苦澀滋味
The time has come for me to pay for yesterday
終於到了付出代價的時間 爲了昨日
When I was young
當我年少輕狂

文件的基本操做

# open帶個文件的方法,encoding指定打開文件的方法
f = open('test1', 'r', encoding='utf-8') 
# readline方法,按行讀取
first_line = f.readline()
print(first_line)
# 關閉文件
f.close()

打開文件的方法

模式 含義
r 只讀模式打開,默認
w 只寫模式,不能夠讀,不存在,則建立,存在則刪除內容
a 追加模式,可讀,不存在建立,存在則在後面追加內容
r+ 讀寫模式,可讀,可寫,可追加
w+ 寫讀模式
a+ 同a同樣
b 以二進制形式打開文件,可與r、w、a結合使用
U 支持全部的換行符,將\r \n自動轉換成\n  , \r\n都表示換行

文件的基本操做

# 文件讀取前5行
f = open('test1', 'r', encoding='utf-8')
count = 0
for line in f:
    if count < 5:
        print(f.readline())
    count += 1


# readlines方法,一次讀取全部的文件,並按行轉換爲列表形式    
f = open('test1', 'r', encoding='utf-8')
line = f.readlines()
print(line)
f.closed

# closed方法,斷定文件是否關閉,關閉結果爲真,反之爲假
f = open('test1', 'r', encoding='utf-8')
line = f.readlines()
print(line)
print(f.closed)


# read方法,一次讀取整個文件,可是文件過大,並不能一次讀取完不
f = open('test1', 'r', encoding='utf-8')
line = f.read()
print(line)
f.close()

#
f = open('test', 'w', encoding='utf-8')
f.write('aaa')
f.flush()

# name方法,顯示文件名
print(f.name)
結果:
test

# tell()方法,顯示文件指針的位置,即文件讀取到哪裏的位置
f = open('test1', 'r+', encoding='utf-8')
line = f.readline()
print(line)
print(f.tell())

# truncate([size]) 保留文件從開始到指定的字符數,其餘的都刪除
f = open('test1', 'r+', encoding='utf-8')
f.truncate(20)

# readable,斷定文件是否可讀
print(f.readable())

# writable,斷定文件是否可寫
print(f.writable()

文件的經常使用方法:

屬性和方法 描述
closed 判斷文件是否關閉,若是文件關閉,返回Ture
encoding 顯示文件的編碼類型
mode 顯示文件的打開模式
name 顯示文件的名稱
newlines 文件使用的換行模式
flush() 把緩存區的內容寫入的磁盤,及強制刷新到磁盤
close() 關閉文件
read([size]) 從文件中讀取size個文件內容,最爲字符串返回
readline([size]) 從文件中讀取一行,做爲 字符串返回。若是執行size,表示每行每次讀取的字節數,依然好讀完整行的內容
readlines([size]) 把文件中的每行存取到列表中返回,若是指定size,表示每行每次讀取的字節數
seek(offset[, whence]) 把文件指針移動到一個新的位置,offset表示至關於whence的位置。whenece用於設置相對位置的起點,0表示從文件的開頭開始計算,1表示從當前位置開始計算,2表示從文件末尾開始計算,若是whenece省略,offset表示相對文件開頭的位置
tell 返回文件指針當前的位置
truncate([size]) 刪除size個字節後的內容
write(str) 把字符串str寫入到文件
writeline() 把字符串序列寫入到文件

修改文件內容:

test1文件內容

Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露

代碼:

with open('test2', 'w', encoding='utf-8') as f1:
    with open('test1', 'r', encoding='utf-8') as f:
        for line in f:
            if '舌尖上的雨露' in line:
                line = line.replace('舌尖上的雨露','舌頭上的美味')
            f1.write(line)

test2文件內容

Somehow, it seems the love I knew was always the most destructive kind
不知爲什麼,我經歷的愛情老是最具毀滅性的的那種
Yesterday when I was young
昨日當我年少輕狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌頭上的美味
相關文章
相關標籤/搜索