文件操作_筆記

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ù)是保存在運(yùn)行內(nèi)存中的,當(dāng)程序運(yùn)行結(jié)束,內(nèi)存自動(dòng)釋放,數(shù)據(jù)也會(huì)消失,如果不希望數(shù)據(jù)隨著程序的結(jié)束而消失,就需要將數(shù)據(jù)通過(guò)文件存儲(chǔ)到硬盤(pán)里面,程序中經(jīng)常用來(lái)保存數(shù)據(jù)的文件有:數(shù)據(jù)庫(kù)文件(db,sqlite)、json文件、plist文件、txt文件、png文件、jpg文件、gif文件、mp4文件、mov文件...

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

1)步驟:

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

a.打開(kāi)文件:

open(file、mode=’r'、encoding=None)
——會(huì)有一個(gè)返回值
說(shuō)明:

file

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

mode

—字符串,文件的打開(kāi)方式,決定打開(kāi)文件后能夠?qū)ξ募鍪裁匆约白x寫(xiě)的數(shù)據(jù)類(lèi)型
'r'、'rt'、'tr' - 以只讀的方式打開(kāi)文件,讀出來(lái)的內(nèi)容是字符串
'rb'、'br' - 以只讀的方式打開(kāi)文件,讀出來(lái)的內(nèi)容是二進(jìn)制數(shù)據(jù)(bytes)
'w'、'wt'、'tw' - 以只寫(xiě)的方式打開(kāi)文件,將字符串寫(xiě)入文件,會(huì)清空原文件
'wb'、'bw' - 以只寫(xiě)的方式打開(kāi)文件,將二進(jìn)制寫(xiě)入文件
'a'、'at'、'ta' - 以只寫(xiě)的方式打開(kāi)文件,將字符串寫(xiě)入文件,不會(huì)清空原文件,追加
'ab'、'ba' - 以只寫(xiě)的方式打開(kāi)文件,將二進(jìn)制寫(xiě)入文件,不會(huì)清空原文件,追加

encoding

—字符串,設(shè)置文本文件的編碼方式,只針對(duì)文本文件有效,一般使用‘utf-8’
注意:1.同一個(gè)文件讀寫(xiě)編碼方式必須一樣;2.只針對(duì)文本文件的文本操作有效,所有帶’b'的打開(kāi)方式都不能設(shè)置encoding

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

文件對(duì)象.close()

相對(duì)路徑

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

打開(kāi)文件

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

3.讀寫(xiě)操作

1)讀操作

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

2)寫(xiě)操作

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

3)with - open

打開(kāi)文件,在文件作用域中對(duì)文件進(jìn)行操作,離開(kāi)文件作用域文件自動(dòng)關(guān)閉

語(yǔ)法:

with open(file,mode=‘r',enconding=None)as 文件對(duì)象:
文件作用域(操作文件)

f = open('01-review.py', 'r', encoding='utf-8')
content = f.read()
print(content)
f.seek(0)    # 移動(dòng)光標(biāo)到文件開(kāi)頭
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.打開(kāi)不存在的文件

以讀的方式打開(kāi)不存在的文件:程序會(huì)報(bào)錯(cuò);
以寫(xiě)的方式打開(kāi)不存在的文件:無(wú)報(bào)錯(cuò),并會(huì)自動(dòng)創(chuàng)建一個(gè)空文件

5.二進(jìn)制文件的讀寫(xiě)

1)普通文本文件:

可以使用帶t或者帶d的讀寫(xiě)方式去打開(kāi)

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

視頻文件,音頻文件,圖片都是二進(jìn)制文件,這些文件只能用帶b的方式去打開(kāi)

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

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

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

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

# 練習(xí):統(tǒng)計(jì)當(dāng)前程序運(yùn)行的次數(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))

補(bǔ)充:eval的使用

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

# 練習(xí):注冊(cè)賬號(hào),并打印當(dāng)前已經(jīng)注冊(cè)過(guò)的賬號(hào)
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ù)格式,幾乎所有的高級(jí)語(yǔ)言都支持將json數(shù)據(jù)轉(zhuǎn)換成當(dāng)前語(yǔ)言數(shù)據(jù),
也支持將當(dāng)前語(yǔ)言數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù),一般數(shù)據(jù)接口提供的數(shù)據(jù)都是json格式的數(shù)據(jù)

2)格式

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

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

數(shù)字類(lèi)型——包括所有的數(shù)字
字符串——用“”雙引號(hào)引起的字符集
bool布爾值——只有true和false兩種(小寫(xiě))
數(shù)組——相當(dāng)于Python中的列表:[ ]
字典——相當(dāng)于Python中的字典:其中key值必須是字符串
空值——null,相當(dāng)于Python中的None,表示空和沒(méi)有

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

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

  json                  Python
數(shù)字類(lèi)型           int、float
字符串             str,雙引號(hào)可能變?yōu)閱我?hào)
布爾值             bool,首字母大寫(xiě)
數(shù)組               list
字典               dict
null               None

b.轉(zhuǎn)換方法

json模塊中有一個(gè)loads可以將json格式的數(shù)據(jù)轉(zhuǎn)換成Python對(duì)應(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                 字符串,雙引號(hào)變?yōu)閱我?hào)
bool                  布爾,首字母小寫(xiě)
list、元祖                  數(shù)組
dict                        字典
None                        null

b.轉(zhuǎn)換方法

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

json.dumps([100, 'abc', True])
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容