day17 文件管理操作

1.數(shù)據(jù)本地化和數(shù)據(jù)持久化 - 通過文件將數(shù)據(jù)儲(chǔ)存到硬盤中

數(shù)據(jù)庫(kù)文件:txt、json、plist、xml、png文件、mp4、mp3等

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

基本步驟:打開文件 --> 操作文件(讀/寫) --> 關(guān)閉文件

1) 打開文件

open(file, mode,encoding = None)  -  已指定的方式打開指定文件,并且返回被打開的文件對(duì)象

file -- 字符串:需要打開的文件路徑
        ./  --  當(dāng)前文件所在目錄
        ../  --  當(dāng)前文件所在目錄的上層目錄
        
mode  -- 字符串: 打開方式
            r -- 默認(rèn)值,以讀的方式打開文件(不能修改內(nèi)容),讀出來的內(nèi)容是文本
            w -- 以寫的方式打開文件,覆蓋源文件
            a -- 以寫的方式打開文件,追加源文件
            rb/br -- 以讀的方式打開,讀出來的內(nèi)容是二進(jìn)制
            wb/bw -- 以寫的方式打開,將二進(jìn)制數(shù)據(jù)寫入文件中
            +   --  以讀寫的方式打開文件(了解)

encoding   --  文本編碼方式
               utf-8
               注意:文本編碼只針對(duì)文本文件、二進(jìn)制文件不能設(shè)置編碼方式

2.文件操作

文件對(duì)象.read()  --   獲取文件中的內(nèi)容,并返回
                                     (讀寫位置默認(rèn)在文件開頭)
文件對(duì)象.seek(字節(jié)數(shù)) --   將讀寫位置移動(dòng)到指定的地方(了解)
def main():
    # 1.文件讀操作
    f = open('test.txt','r',encoding= 'utf-8')
    print(f)
    result = f.read()
    print(result)



    # 2.文件寫操作
    """
    文件對(duì)象.write(內(nèi)容)  --  將指定內(nèi)容寫到文件里,并覆蓋源文件內(nèi)容
    """
    f = open('test.txt','w',encoding= 'utf-8')
    wrt = f.write('李白想婆娘')
    print(wrt)

    # 關(guān)閉文件
    """
    文件對(duì)象.close()
    """
    f.close()

    # ======
    """
    注意:打開文件的時(shí)候,如果以讀的方式打開一個(gè)不存在的文件,會(huì)出現(xiàn)異常報(bào)錯(cuò)
          如果以寫的方式打開一個(gè)不存在的文件,不會(huì)出現(xiàn)異常并且會(huì)創(chuàng)建一個(gè)新的對(duì)應(yīng)的文件并打開操作
    """

if __name__ == '__main__':
    main()

二進(jìn)制文件操作

rb  -   讀的時(shí)候獲取到的是二進(jìn)制數(shù)據(jù)(bytes)
wb   -  寫的時(shí)候?qū)懭氲膬?nèi)容要求類型是二進(jìn)制文件

普通的文本文件可以通過二進(jìn)制的形式去打開,影響只是獲取到的內(nèi)容,和寫的內(nèi)容的數(shù)據(jù)類型;
二進(jìn)制文件只能以二進(jìn)制的形式打開(例如:圖片,音頻)

二進(jìn)制數(shù)據(jù)

一般二進(jìn)制數(shù)據(jù)都是通過網(wǎng)絡(luò)請(qǐng)求獲取到,或者通過讀取本地的二進(jìn)制文件獲取

1)將字符串轉(zhuǎn)換二進(jìn)制
bytes(str,encoding = 'utf-8')   

字符串.encode(編碼方式) -  str.encode(encoding = 'utf-8')


2) 將二進(jìn)制轉(zhuǎn)換成字符串
str(二進(jìn)制數(shù)據(jù),encoding = 'utf-8')

二進(jìn)制數(shù)據(jù).decode(編碼方式)

文件上下文

with open(文件路徑,打開方式,編碼方式) as 文件對(duì)象:
操作文件

文件操作完成后,會(huì)自動(dòng)關(guān)閉

def main():
    with open('./files/test.txt', 'r', encoding='utf-8') as f1:
        print(f1.read())

    # 1. 普通文本文件以二進(jìn)制的形式打開
    f = open('./files/test.txt', 'rb')
    reslut = f.read()
    print(reslut, type(reslut))

    f = open('./files/test.txt', 'wb')
    f.write(bytes('bbb', encoding='utf-8'))

    # 2. 二進(jìn)制文件
    f1 = open('./files/luffy4.jpg', 'rb')
    reslut = f1.read()
    print(reslut, type(reslut))

    f2 = open('./files/aaa.jpg', 'wb')
    f2.write(reslut)



if __name__ == '__main__':
    main()

1.json數(shù)據(jù)

滿足json格式的數(shù)據(jù)就叫json數(shù)據(jù)

json格式: 一個(gè)json有且只有一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)必須是json支持的數(shù)據(jù)類型

json支持的數(shù)據(jù)類型:
1、數(shù)字(number) -  包含所有的數(shù)字(整數(shù)和小數(shù)),并且支持科學(xué)計(jì)數(shù)法。
2、字符串(string)  -  通過雙引號(hào)包含的字符集 :"abcd","1234","你好"   字符也可以是轉(zhuǎn)義字符
3、布爾(boolean)  -  true/false
4、數(shù)組(array)  -   相當(dāng)于python中的列表,[100,"abc",true,[1,2,3]]
5、字典(dictionary)  -  相當(dāng)于python中的字典,{"a":10,"b":100,"c":true}
6、空值     -   null,  相當(dāng)于 None

2.使用json

1) 解析json數(shù)據(jù)(獲取到j(luò)son數(shù)據(jù)后將json中想要的東西解析出來) -- 做前端開發(fā)人的工作

2) 構(gòu)造json數(shù)據(jù)

# =====================1.json轉(zhuǎn)python(json數(shù)據(jù)解析)============
在python中有一個(gè)內(nèi)置庫(kù),專門負(fù)責(zé)json數(shù)據(jù)的處理: json庫(kù)
a. 將json數(shù)據(jù)轉(zhuǎn)換成python數(shù)據(jù)
json數(shù)據(jù)              python數(shù)據(jù)
number                 int/float
string                 str,可能會(huì)出現(xiàn)將雙引號(hào)變成單引號(hào)
bool                   bool,true -> True   false ->  False
array                  list
dictionary             dict
空                     null -> None

json.loads(字符串,encoding = 'utf-8') - 解析json數(shù)據(jù)
字符串要求: 字符串中內(nèi)容本身就是一個(gè)json數(shù)據(jù)(去掉引號(hào)后,本身就是一個(gè)json數(shù)據(jù))

result = json.loads('"abc"',encoding='utf-8')
print(result,type(result))    # abc <class 'str'>

result = json.loads('100',encoding='utf-8')
print(result,type(result))    # 100 <class 'int'>

result = json.loads('true',encoding='utf-8')
print(result,type(result))    # True <class 'bool'>

result = json.loads('[10,23,"nsq",true]',encoding='utf-8')
print(result,type(result))    # [10, 23, 'nsq', True] <class 'list'>

result = json.loads('{"a": 100,"b": false}',encoding='utf-8')
print(result,type(result))    # {'a': 100, 'b': False} <class 'dict'>

with open('jsontest.json','r',encoding='utf-8')as f:
    result = f.read()
    result_py = json.loads(result,encoding='utf-8')
    result1 = result_py['data']
    max_dict = max(result1, key=lambda x: int(x['favourite']))
    print(max_dict['name'],max_dict['text'],max_dict['favourite'])

# ======================2.將python 轉(zhuǎn)換為json 數(shù)據(jù)======================

"""
python數(shù)據(jù)          json數(shù)據(jù)
int/float            number
bool                 True => true , False => false
str                  string  '' => ""
list,tuple           array
dict                 dictionary
空值                 None => null


json.dumps(python數(shù)據(jù))   ==》 將python數(shù)據(jù)轉(zhuǎn)換為對(duì)應(yīng)的json數(shù)據(jù) 其結(jié)果是字符串類型
"""
result = json.dumps('abc')
print(result,type(result))
# ===================3.json 文件操作=====================
"""
json.load(文件對(duì)象)   -   將文件對(duì)象中的文件內(nèi)容轉(zhuǎn)換為python數(shù)據(jù)
                          要求文件內(nèi)容是json數(shù)據(jù)

json.dump(python數(shù)據(jù),文件對(duì)象) -  將python數(shù)據(jù)轉(zhuǎn)換成json數(shù)據(jù),結(jié)果(字符串)再寫入指定文件中

"""
with open('test.txt','r',encoding='utf-8')as f:
    result = json.load(f)
    print(type(result),result)
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一.文件管理 os庫(kù)提供了很多和文件管理操作 1.數(shù)據(jù)本地化和數(shù)據(jù)持久化 - 通過文件將數(shù)據(jù)存到硬盤中數(shù)據(jù)庫(kù)文...
    程序里的小仙女閱讀 504評(píng)論 0 3
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,957評(píng)論 0 9
  • 文件操作 1.數(shù)據(jù)本地化和數(shù)據(jù)持久化 通過文件將數(shù)據(jù)存到硬盤中 2.文件內(nèi)容操作 基本步驟:打開文件 --> 操作...
    灬小魚兒zzZ閱讀 193評(píng)論 0 0
  • 1.數(shù)據(jù)本地化和數(shù)據(jù)持久化 - 通過文件將數(shù)據(jù)存到硬盤中 數(shù)據(jù)庫(kù)文件、txt、json、plist、xml、p...
    不挖石油的小小閱讀 229評(píng)論 0 1
  • 一.文件操作 備注: os庫(kù)提供了很多文件管理和操作 1 數(shù)據(jù)本地化和數(shù)據(jù)持久化 通過文件將數(shù)據(jù)存到硬盤中 數(shù)據(jù)庫(kù)...
    ham731閱讀 271評(píng)論 0 0

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