python文件操作

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文件...mp3文件/mov文件等/mp3等

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

1)步驟:

打開文件 -> 操作文件內(nèi)容(讀操作/寫操作) -> 關(guān)閉文件
打開文件: open(file,mode = 'r',encoding=None) - 以指定的方式打開指定文件并且返回文件對象

說明:

file - 字符串;文件在電腦中的地址(文件路徑)
路徑可以寫絕對路徑,也可以寫相對路徑
絕對路徑 - 文件在電腦中完整的路徑(r'絕對路徑')
相對路徑 - 文件在工程目錄下的路徑,('./文件名')/('文件名')
./代表當前目錄
../代表當前目錄的上層目錄
.../代表當前目錄的上層目錄的上層目錄

注意:當前目錄值得是當前py文件所在的目錄

  • mode - 字符串;文件的打開方式,決定打開文件后能夠?qū)ξ募鍪裁匆约白x寫的數(shù)據(jù)類型
    'r'/'rt'/'tr' - 以只讀的方式打開文件;讀出來的內(nèi)容是字符串
    'rb'/'br' - 以只讀的方式打開文件;讀出來的內(nèi)容四二進制數(shù)據(jù)(bytes)
    'w'/'wt'/'tw' - 以只寫的方式打開文件;將字符串寫入文件(覆蓋的方式)(打開就直接清空原內(nèi)容)
    'wb'/'bw' - 以只寫的方式打開文件;將二進制寫入文件(覆蓋的方式)
    'a'/'at'/'ta' - 以只寫的方式打開文件;以字符串寫入文件(追加的方式)
    'ab'/'ba' - 以只寫的方式打開文件;將二進制寫入文件(追加的方式)

  • encoding - 字符串:設(shè)置文本文件的編碼方式(只針對文本文件有效); 一般使用'utf-8'
    注意:
    1.同一個文件,讀和寫的編碼方式必須一樣
    2.值針對文本文件的文本操作有效,所有帶b的操作都不能設(shè)置encoding

關(guān)閉文件:
文件對象.close()

3.讀寫操作

"""

1) 讀操作

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

注意:讀操作中讀的位置是從光標開始,換行讀會讓光標下移
f.seek(0) - 移動光標到開頭

2) 寫操作

對象.write(內(nèi)容) - 將內(nèi)容寫入到指定的文件中

1.with - open

打開文件,在文件作用域中對文件進行操作,離開文件作用域文件自動關(guān)閉
語法:
with open(file,mode='r',encoding=None) as 文件對象:
文件作用域(操作文件)

with open('./file/testfile1','a',encoding='utf-8') as f:
    print(f.write('我要做宰相\n'))

2.打開不存在的文件

以讀的方式打開不存在的文件:程序會出現(xiàn)filenotfounderror異常
以寫的方式打開不存在的文件:不會出現(xiàn)異常,并且會創(chuàng)建一個空的文件

3.二進制文件的讀寫

1)普通文本文件:可以適用帶t或者帶d的讀寫方式去打開
2)二進制數(shù)據(jù)文件:視頻文件/音頻文件/圖片文件都是二進制文件,這些文件只能用帶b的打開方式去打開

數(shù)據(jù)的持久化

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

"""
a.將數(shù)據(jù)保存到本地文件
b.需要這個數(shù)據(jù)的時候不是直接賦值,而是從本地文件中去取值
c.當數(shù)據(jù)的值發(fā)生改變后,將最新的數(shù)據(jù)更新到文件中

1.統(tǒng)計當前程序運行的次數(shù)

# num=1
# print(num)
# num += 1
with open('file/testfile2.txt','r',encoding='utf-8') as f:
    num = int(f.read())

num += 1
print('第%d次運行程序'%num)
with open('file/testfile2.txt', 'w', encoding='utf-8') as f:
    f.write(str(num))

eval:去掉字符串的引號,將其轉(zhuǎn)換為其它序列(去掉引號里面是什么就轉(zhuǎn)換成什么)

str1 = "{'a':1,'b':2}"
dict1 = eval(str1)
str2 = "[1,2,3,4,5]"
list1 = eval(str2)

練習:注冊賬號,并且打印當前以及注冊過的賬號

with open('file/user_pw','r',encoding='utf-8') as f:
    users = eval(f.read())

while True:
    user_name = input('用戶名:')
    pw = input('密碼:')
    users[user_name] = pw
    value = input('是否繼續(xù)(y/n):')
    if value == 'n':
        break
print(users)

with open('file/user_pw','w',encoding='utf-8') as f:
    f.write(str(users))

json數(shù)據(jù)

1.什么是json數(shù)據(jù)

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.json格式

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

json支持的數(shù)據(jù)類型:
數(shù)字類型 - 包括所有的數(shù)字.例如:100、 -23、 23.4、 3e4
字符串 - 用雙引號引起來的字符集,例如:"aad"、 "123"、 "asd123"、 "asd\n334"、 "\u4e00"
布爾值 - 只有true和false兩個值(小寫)
數(shù)組 - 相當于python中的列表:[123,"你好",true,[1,2,3]]
字典 - 相當于python中的字典;key必須是json的字符串:{"a":1,"b":2}
空值 - null:相當于python中的None,表示空和沒有

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

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

json python
數(shù)字類型 int/float
字符串 str,雙引號可能會變成單引號
布爾值 bool,true -> True, false -> False
數(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模塊是python內(nèi)置的模塊:模塊主要提供和json操作相關(guān)的函數(shù)

import json
print(type(json.loads('"123"')),json.loads('"123"'))    # <class 'str'> 123
print(type(json.loads('123')),json.loads('123'))    # <class 'int'> 123
print(type(json.loads('[1,2,3,true]')),json.loads('[1,2,3,true]'))    # <class 'list'> [1, 2, 3, True]
print(type(json.loads('{"a":1,"b":null}')),json.loads('{"a":1,"b":null}'))    # <class 'dict'> {'a': 1, 'b': None}

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

1) 轉(zhuǎn)換關(guān)系

python -> json
int、float -> 數(shù)字
str -> 字符串(單引號會變成雙引號
bool -> 布爾 True -> true False -> false
list/tuple -> 數(shù)組
dict -> 字典
None -> null
注意:其它類型需要先轉(zhuǎn)換成以上python類型,再轉(zhuǎn)換

2)轉(zhuǎn)換方法

dumps(數(shù)據(jù)) -> 不管數(shù)據(jù)是什么,dumps都會將括號中的數(shù)據(jù)轉(zhuǎn)換為json格式的字符串

print(type(json.dumps([1,2,3,4])), json.dumps([1,2,3,4])) # <class 'str'> [1, 2, 3, 4]

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

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

  • 程序中產(chǎn)生的數(shù)據(jù)默認保存在內(nèi)存中,程序結(jié)束數(shù)據(jù)會自動銷毀。如果希望程序運行結(jié)束后數(shù)據(jù)不銷毀,需要對這個數(shù)據(jù)做數(shù)據(jù)持...
    Error_2d57閱讀 336評論 0 0
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,319評論 0 10
  • day12-總結(jié) 文件操作 文件操作 1.數(shù)據(jù)持久化(數(shù)據(jù)本地化) 2.文件操作(操作文件中的內(nèi)容) 絕對路徑 相...
    奔跑的_____閱讀 184評論 0 0
  • 好想和我爸爸喊我來這里看到你u我也不知道自己到底在那里 活動結(jié)束開始看書黨內(nèi)監(jiān)督恩恩模式開啟,你們在干嘛我都不知道...
    ZJP_3396閱讀 277評論 0 0
  • 大家好,我是E戰(zhàn)飛躍隊的小敏,我們E戰(zhàn)飛躍隊的口號是: 團結(jié)E心,其利斷金 飛躍極限,勇奪桂冠 我們堅持做到: 生...
    5隊小敏閱讀 321評論 0 0

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