Python語言基礎(chǔ)之——文件操作

1. 文件操作

1.計算機數(shù)據(jù)的存儲

計算機的存儲系統(tǒng)分為運行內(nèi)存和硬盤兩種
運行內(nèi)存:用來保存程序運行過程中產(chǎn)生的數(shù)據(jù)入偷,程序運行結(jié)束后會自動銷毀
硬盤 :用來保存文件掉蔬,保存在文件中的數(shù)據(jù)就是保存在硬盤中的,除非手動刪除煤裙,否則數(shù)據(jù)會一直在

2.數(shù)據(jù)持久化

數(shù)據(jù)持久化就是將數(shù)據(jù)以各種形式保存在硬盤中(保存到本地文件中)

3.文件操作

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

打開文件

open(file, mode='r', encoding=None) - 以指定的模式打開指定的文件,并且返回一個文件對象
說明:
file - 文件路徑锣笨,字符串類型
絕對路徑:文件或者文件夾的全路徑(一般不寫絕對路徑)
相對路徑:只寫文件絕對路徑的一部分,另一部分用特殊符號代替
特殊符號:./ -> 表示當(dāng)前路徑 (可以省略)
../ -> 表示當(dāng)前目錄的上層目錄
.../
mode - 打開方式道批,字符串類型
第一組:控制操作類型:
r - 以只讀的方式打開文件(默認值)
w - 以只寫的方式打開文件错英,打開前會先清空原文件的內(nèi)容
a - 以只寫的方式打開文件,不會清空
第二組:控制數(shù)據(jù)類型(文本數(shù)據(jù)-str/二進制數(shù)據(jù)-bytes):
t - 操作的數(shù)據(jù)是文本數(shù)據(jù)(默認值)
b - 操作的數(shù)據(jù)是二進制數(shù)據(jù)
注意:每一組只選一個屹徘,兩組值進行組合使用
encoding - 文本編碼方式走趋;直接寫'utf-8'
注意:如果打開方式中帶b,就不能設(shè)置encoding

close()

open('/Users/zhangzhishuai/Desktop/千峰/01語言基礎(chǔ)/day14-文件操作/files/text.txt')
open('./files/text.txt')

2.文件操作的讀寫操作

1.打開文件方式一:

文件對象 = open()
操作文件對象
文件對象.close

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

f = open('files/text.txt', encoding='utf-8')
print(f.read())
f.close()
with open('files/text.txt', encoding='utf8') as f:
print(f.read())

2.文件讀操作

1)文件對象.read() - 從文件讀寫位置開始,讀到文件的結(jié)尾(默認情況下讀寫位置在開頭)
2)文件對象.readline() - 讀文本文件的一行內(nèi)容噪伊,從當(dāng)前讀寫位置讀到一行的結(jié)束
3)文件對象.readline() - 一行一行的讀簿煌,讀完為止,返回的是一個列表鉴吹,列表元素是每一行的內(nèi)容

with open('text2.txt', 'r', encoding='utf8') as f:
print('第一次', f.read())
print('第二次', f.read())
with open('text2.txt', 'r', encoding='utf8') as f:
print('第一次', f.readline())
print('第er次', f.readline())

3.數(shù)據(jù)持久化

1.數(shù)據(jù)持久化的基本操作

a. 數(shù)據(jù)保存在文件中
b.需要數(shù)據(jù)時候從文件中取讀數(shù)據(jù)
c.當(dāng)數(shù)據(jù)發(fā)生改變的時候姨伟,對保存數(shù)據(jù)的文件進行更新

注意:如果以讀的方式打開一個不存在的文件,會報錯豆励,如果是以寫的方式打開一個不存在的文件夺荒,不會報錯,而且會自動新建這個文件
練習(xí):寫一個程序良蒸,統(tǒng)計這個程序啟動的次數(shù)

with open('text2.txt', encoding='utf8') as f:
    count = int(f.read())
    count += 1
    print(count)
with open('text2.txt', 'w', encoding='utf8') as f:
    f.write(str(count))

4.字典和列表的數(shù)據(jù)持久化

names = [{'name': '張三', 'age': '34', 'tel': 213},
         {'name': '張三', 'age': '34', 'tel': 213},
         {'name': '張三', 'age': '34', 'tel': 213}
        ]
#1.字典和列表的寫操作 先將列表或字典轉(zhuǎn)換成字符串
with open('text2.txtf', 'w', encoding='utf-8') as f:
    f.write(str(names))
#2.字典和列表的讀操作
with open('text2.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)
    print(type(content))
    new_content = eval(content)
    print(new_content)
    print(type(new_content))
    for item in new_content:
        print(item)
def add_students():
    name = input('姓名:')
    age = input('age:')
    tel = input('tel:')
    stu = {'name': name, 'age': age, 'tel': tel}
    with open('text2.txt', 'r', encoding='utf-8') as f:
        all_students = eval(f.read())
    all_students.append(stu)
    with open('text2.txt', 'w', encoding='utf-8') as f:
        f.write(str(all_students))
add_students()

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

1.什么是json
import json
1)存在的意義
json就是不同編程語言之間進行數(shù)據(jù)交流的一種通用格式
2)概念
json是一種數(shù)據(jù)格式
a.一個json有且只有一個數(shù)據(jù)
b.這個數(shù)據(jù)是json支持的數(shù)據(jù)類型的數(shù)據(jù)
3)json支持的數(shù)據(jù)類型
數(shù)字類型 字符串 布爾 數(shù)組 字典(對象) 空值(null)
數(shù)字類型:所有的數(shù)字對應(yīng)的類型 支持科學(xué)計數(shù)法
字符串:只能是雙引號引起來技扼,支持轉(zhuǎn)義字符
布爾:true false 都要小寫
數(shù)組:相當(dāng)于Python的列表
字典:相當(dāng)于Python字典但是字典的key只能是字符串,{key1: value1, key2:value2...}
空值:null 相當(dāng)于Python中的none

2.json轉(zhuǎn)Python
json Python
數(shù)字類型 數(shù)字
字符串 字符串(可能會將雙引號變成單引號)
布爾 布爾(小寫變大寫)
數(shù)組 列表
字典 字典
空值(null) 空值(none)
json.loads(字符串) : 將json格式的字符串轉(zhuǎn)換成Python對應(yīng)的數(shù)據(jù)(這的字符串的內(nèi)容必須滿足json格式)

3.Python轉(zhuǎn)json
Python json
int/float 數(shù)字類型
字符串 字符串都變成雙引號
布爾 布爾(大寫變小寫)
列表/元組 數(shù)組
字典 字典
None null
json.dumps(數(shù)據(jù)) : 將指定的Python數(shù)據(jù)轉(zhuǎn)換成json格式的字符串

result = json.loads('"abc"')
print(result)
print(type(result))

result = json.dumps([1, 'qeq', True, None])
print(result)
print(type(result))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嫩痰,一起剝皮案震驚了整個濱河市剿吻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌串纺,老刑警劉巖丽旅,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纺棺,居然都是意外死亡榄笙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門祷蝌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茅撞,“玉大人,你說我怎么就攤上這事巨朦∠绯幔” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵罪郊,是天一觀的道長蠕蚜。 經(jīng)常有香客問我,道長悔橄,這世上最難降的妖魔是什么靶累? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮癣疟,結(jié)果婚禮上挣柬,老公的妹妹穿的比我還像新娘。我一直安慰自己睛挚,他們只是感情好邪蛔,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扎狱,像睡著了一般侧到。 火紅的嫁衣襯著肌膚如雪勃教。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天匠抗,我揣著相機與錄音故源,去河邊找鬼。 笑死汞贸,一個胖子當(dāng)著我的面吹牛绳军,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矢腻,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼门驾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了多柑?” 一聲冷哼從身側(cè)響起奶是,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎顷蟆,沒想到半個月后诫隅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡帐偎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年逐纬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片削樊。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡豁生,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漫贞,到底是詐尸還是另有隱情甸箱,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布迅脐,位于F島的核電站芍殖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谴蔑。R本人自食惡果不足惜豌骏,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隐锭。 院中可真熱鬧窃躲,春花似錦、人聲如沸钦睡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洒琢,卻和暖如春秧秉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纬凤。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工福贞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撩嚼,地道東北人停士。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像完丽,于是被迫代替她去往敵國和親恋技。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345