文件操作_筆記

review

1.帶參裝飾器:

def change_value(is_add):
    def test1(fn):
        def test2(*args, **kwargs):
            if is_add:
                return fn(*args, **kwargs) + 100
            else:
                return fn(*args, **kwargs) - 100
        return test2
    return test1
@change_value(is_add=True)
def func1(x, y):
    return x * y
print(func1(2, 3))

2.交換字典key值和value,產(chǎn)生新字典(生成式)

dict1 = {}
dict2 = {dict1[key]: key for key in dict1}

3.斗地主

import random
def new_poker():
    pokers = []
    nums = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
    colors = ['?', '?', '?', '?']
    for num in nums:
        for color in colors:
            pokers.append('%s%s' % (color, num))
    pokers.extend(('小王', '大王'))
    random.shuffle(pokers)
    return pokers
print(new_poker())

1.數(shù)據(jù)持久化(數(shù)據(jù)本地化)

保存在程序中的數(shù)據(jù)是保存在運行內(nèi)存中的懦砂,當程序運行結(jié)束,內(nèi)存自動釋放组橄,數(shù)據(jù)也會消失荞膘,如果不希望數(shù)據(jù)隨著程序的結(jié)束而消失,就需要將數(shù)據(jù)通過文件存儲到硬盤里面玉工,程序中經(jīng)常用來保存數(shù)據(jù)的文件有:數(shù)據(jù)庫文件(db羽资,sqlite)、json文件遵班、plist文件屠升、txt文件、png文件狭郑、jpg文件腹暖、gif文件、mp4文件翰萨、mov文件...

2.文件操作(操作文件中的內(nèi)容)

1)步驟:

打開文件-操作文件內(nèi)容(讀操作脏答、寫操作)-關(guān)閉文件

a.打開文件:

open(file、mode=’r'亩鬼、encoding=None)
——會有一個返回值
說明:

file

— 字符串殖告,文件在電腦中的地址(文件路徑),路徑可以寫絕對路徑也可以寫相對路徑
絕對路徑 — 文件在電腦中的完整路徑
相對路徑 — ./代表當前目錄(可以省略) — ../代表當前目錄的長層目錄
注意:當前目錄值得是當前py文件所在的目錄

mode

—字符串雳锋,文件的打開方式黄绩,決定打開文件后能夠?qū)ξ募鍪裁匆约白x寫的數(shù)據(jù)類型
'r'、'rt'玷过、'tr' - 以只讀的方式打開文件爽丹,讀出來的內(nèi)容是字符串
'rb'、'br' - 以只讀的方式打開文件冶匹,讀出來的內(nèi)容是二進制數(shù)據(jù)(bytes)
'w'习劫、'wt'、'tw' - 以只寫的方式打開文件嚼隘,將字符串寫入文件诽里,會清空原文件
'wb'、'bw' - 以只寫的方式打開文件飞蛹,將二進制寫入文件
'a'谤狡、'at'灸眼、'ta' - 以只寫的方式打開文件,將字符串寫入文件墓懂,不會清空原文件焰宣,追加
'ab'、'ba' - 以只寫的方式打開文件捕仔,將二進制寫入文件匕积,不會清空原文件,追加

encoding

—字符串榜跌,設(shè)置文本文件的編碼方式闪唆,只針對文本文件有效,一般使用‘utf-8’
注意:1.同一個文件讀寫編碼方式必須一樣钓葫;2.只針對文本文件的文本操作有效悄蕾,所有帶’b'的打開方式都不能設(shè)置encoding

b.關(guān)閉文件:

文件對象.close()

相對路徑

open(r'.\02-文件操作.py')

打開文件

f = open('01-review.py', 'r', encoding='utf-8')

3.讀寫操作

1)讀操作

文件對象.read()——獲取整個文件的內(nèi)容,以字符串或者二進制的形式返回
文件對象.readline()——獲取文本文件中一行的內(nèi)容础浮,以字符串或者二進制的形式返回

2)寫操作

文件對象.write(內(nèi)容)

3)with - open

打開文件帆调,在文件作用域中對文件進行操作,離開文件作用域文件自動關(guān)閉

語法:

with open(file豆同,mode=‘r'番刊,enconding=None)as 文件對象:
文件作用域(操作文件)

f = open('01-review.py', 'r', encoding='utf-8')
content = f.read()
print(content)
f.seek(0)    # 移動光標到文件開頭
content = f.readline()
print(content)

with open('./01-review.py', 'r', encoding='utf-8') as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line)

4.打開不存在的文件

以讀的方式打開不存在的文件:程序會報錯;
以寫的方式打開不存在的文件:無報錯影锈,并會自動創(chuàng)建一個空文件

5.二進制文件的讀寫

1)普通文本文件:

可以使用帶t或者帶d的讀寫方式去打開

2)二進制數(shù)據(jù)文件:

視頻文件撵枢,音頻文件,圖片都是二進制文件精居,這些文件只能用帶b的方式去打開

6.怎么做到數(shù)據(jù)的持久化

1)將數(shù)據(jù)保存到本地文件

2)需要這個數(shù)據(jù)的時候锄禽,不是直接賦值而是從本地文件去取值

3)當數(shù)據(jù)值發(fā)生改變后,將新的數(shù)據(jù)跟新到文件中

# 練習:統(tǒng)計當前程序運行的次數(shù)
num = 1
print(num)
num += 1

with open('count.txt', 'r', encoding='utf-8') as f:
    num = int(f.read())
num += 1
print('第%d次' % num)
with open('count.txt', 'w',encoding='utf-8') as f:
     f.write(str(num))

補充:eval的使用

將序列字符串轉(zhuǎn)換成序列

# 練習:注冊賬號靴姿,并打印當前已經(jīng)注冊過的賬號
with open('count.txt', 'r', encoding='utf-8') as f:
    users = eval(f.read())
while True:
    user_name = input('用戶名:')
    pw = input('密碼:')
    users[user_name] = pw
    x = input('是否繼續(xù)(y/n):')
    if x == 'n':
        break
print(users)
with open('count.txt', 'w', encoding='utf-8') as f:
    f.write(str(users))

7.json數(shù)據(jù):

json模塊是Python內(nèi)置的模塊
import json

1)概念

json是一種通用的數(shù)據(jù)格式沃但,幾乎所有的高級語言都支持將json數(shù)據(jù)轉(zhuǎn)換成當前語言數(shù)據(jù),
也支持將當前語言數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù)佛吓,一般數(shù)據(jù)接口提供的數(shù)據(jù)都是json格式的數(shù)據(jù)

2)格式

a.一個json有且只能有一個數(shù)據(jù) b.這個數(shù)據(jù)必須是json支持的數(shù)據(jù)類型的數(shù)據(jù)

3)json支持的數(shù)據(jù)類型

數(shù)字類型——包括所有的數(shù)字
字符串——用“”雙引號引起的字符集
bool布爾值——只有true和false兩種(小寫)
數(shù)組——相當于Python中的列表:[ ]
字典——相當于Python中的字典:其中key值必須是字符串
空值——null宵晚,相當于Python中的None,表示空和沒有

3)將json數(shù)據(jù)轉(zhuǎn)換成python數(shù)據(jù)

a.對應(yīng)關(guān)系

  json                  Python
數(shù)字類型           int维雇、float
字符串             str淤刃,雙引號可能變?yōu)閱我?布爾值             bool,首字母大寫
數(shù)組               list
字典               dict
null               None

b.轉(zhuǎn)換方法

json模塊中有一個loads可以將json格式的數(shù)據(jù)轉(zhuǎn)換成Python對應(yīng)的數(shù)據(jù)
loads(字符串)——將json格式的字符串轉(zhuǎn)換成Python數(shù)據(jù)吱型,這的字符串的內(nèi)容是json數(shù)據(jù)

json.loads('100')
json.loads('"abc"')

4)將Python數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù)

a.轉(zhuǎn)換關(guān)系

Python                      json
int逸贾、float                  數(shù)字
str                 字符串,雙引號變?yōu)閱我?bool                  布爾,首字母小寫
list铝侵、元祖                  數(shù)組
dict                        字典
None                        null

b.轉(zhuǎn)換方法

dumps(數(shù)據(jù))——將將括號中的Python數(shù)據(jù)轉(zhuǎn)換成json格式的字符串

json.dumps([100, 'abc', True])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末灼伤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咪鲜,更是在濱河造成了極大的恐慌狐赡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疟丙,死亡現(xiàn)場離奇詭異颖侄,居然都是意外死亡,警方通過查閱死者的電腦和手機享郊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門发皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拂蝎,你說我怎么就攤上這事』淌遥” “怎么了温自?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長皇钞。 經(jīng)常有香客問我悼泌,道長,這世上最難降的妖魔是什么夹界? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任馆里,我火速辦了婚禮,結(jié)果婚禮上可柿,老公的妹妹穿的比我還像新娘鸠踪。我一直安慰自己,他們只是感情好复斥,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布营密。 她就那樣靜靜地躺著,像睡著了一般目锭。 火紅的嫁衣襯著肌膚如雪评汰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天痢虹,我揣著相機與錄音被去,去河邊找鬼。 笑死奖唯,一個胖子當著我的面吹牛惨缆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼踪央,長吁一口氣:“原來是場噩夢啊……” “哼臀玄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起畅蹂,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤健无,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后液斜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體累贤,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年少漆,在試婚紗的時候發(fā)現(xiàn)自己被綠了臼膏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡示损,死狀恐怖渗磅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情检访,我是刑警寧澤始鱼,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站脆贵,受9級特大地震影響医清,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卖氨,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一会烙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筒捺,春花似錦柏腻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至村斟,卻和暖如春贫导,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟆盹。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工孩灯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逾滥。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓峰档,卻偏偏與公主長得像败匹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子讥巡,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容