文件操作
'''
計(jì)算機(jī)內(nèi)存分為硬盤和運(yùn)行內(nèi)存潭袱。當(dāng)運(yùn)行程序的時(shí)候系統(tǒng)會(huì)自動(dòng)在運(yùn)行內(nèi)存中開辟空間保存程序運(yùn)行過程中
產(chǎn)生的數(shù)據(jù)迫淹;但是當(dāng)程序運(yùn)行結(jié)束的時(shí)候冀值,這個(gè)內(nèi)存空間會(huì)自動(dòng)銷毀伟端,所有數(shù)據(jù)也會(huì)銷毀。如果希望數(shù)據(jù)一直存在
需要將數(shù)據(jù)存儲(chǔ)在硬盤中夹厌。
存儲(chǔ)在本地文件中的數(shù)據(jù)豹爹,就是存儲(chǔ)在硬盤中的數(shù)據(jù),就能持久化矛纹。
編程中常用的文件:txt文件臂聋,二進(jìn)制文件(圖片、視頻、音頻孩等、壓縮文件)艾君、json文件、plist文件肄方、數(shù)據(jù)庫文件(.db,.sqlite)
'''
2.文件操作 - 文件內(nèi)容的操作
'''
1.基本步驟:打開文件 - 讀/寫操作 - 關(guān)閉文件
open(file, model='r', encoding= None) - 打開指定文件冰垄,返回文件對(duì)象
file - 字符串,需要打開的文件路徑权她,可以是絕對(duì)路徑也可以是相對(duì)路徑
絕對(duì)路徑:文件在電腦中的全路徑(很少使用)
相對(duì)路徑:./(當(dāng)前目錄-當(dāng)前py文件所在目錄)播演,可以省略
../(當(dāng)前目錄的上層目錄)
mode - 字符串,文件打開方式伴奥;打開方式?jīng)Q定了打開文件后支持的操作和操作的數(shù)據(jù)的類型
'r': 默認(rèn)值,只讀翼闽;讀出來的數(shù)據(jù)是字符串
'w':只寫拾徙;只能將字符串寫入文件,(先刪除源文件的內(nèi)容再寫)
'rb'/'br':只讀感局;讀出來的數(shù)據(jù)是二進(jìn)制數(shù)據(jù)(bytes)
'wb'/'bw':只寫尼啡;只能將二進(jìn)制數(shù)據(jù)寫入文件,(先刪除源文件的內(nèi)容再寫)
'a': 只寫询微;只能將字符串寫入文件(保留原文件內(nèi)容追加)
'ab'/'ba':只寫崖瞭;只能將二進(jìn)制數(shù)據(jù)寫入文件,(保留原文件內(nèi)容追加)
encoding - 設(shè)置文件內(nèi)容的編碼方式撑毛,固定寫法:'utf-8';只針對(duì)文本文件有效
注意:1)只有文本操作才能設(shè)置編碼方式
windows默認(rèn)的是'gbk'
2)操作文件
a.讀操作 - 獲取文件中的內(nèi)容
文件對(duì)象.read() - 會(huì)返回文件中的內(nèi)容
文件對(duì)象.readline() - 讀一行內(nèi)容(從讀寫位置讀到一行結(jié)束)
3)關(guān)閉文件
文件對(duì)象.close()
'''
打開文件
f = open('./files/text1.txt', 'r', encoding='utf-8')
獲取文件中的內(nèi)容
對(duì)象.read() - 獲取文件中所有的內(nèi)容
content = f.read()
print(type(content))
print(content)
移動(dòng)讀寫位置(移動(dòng)光標(biāo))
文件對(duì)象.seek(0) - 將讀寫位置移動(dòng)到文件開頭
f.seek(0)
print('====:', f.read())
關(guān)閉文件
f.close()
# 練習(xí):讀文件中的內(nèi)容书聚,一行一行的讀完為止
f = open('./files/text1.txt', 'r', encoding='utf-8')
while True:
content = f.readline()
if not content:
break
print(content)
f.close()
print('==============寫操作===============')
'''
寫操作:文件對(duì)象.write(內(nèi)容) - 將指定的內(nèi)容寫入文件中
'''
f = open('./files/text1.txt', 'w', encoding='utf-8')
f.write('abc')
f.close()
二進(jìn)制文件
1.常見的二進(jìn)制文件:圖片文件、視頻文件藻雌、音頻文件雌续、壓縮文件等
'''
不是只有二進(jìn)制文件才支持'b'操作(rb, wb, ab),但是二進(jìn)制文件只能采用'b'操作
注意:所有帶'b'的操作都不能設(shè)置encoding
'''
f = open('./files/text1.txt', 'rb')
content = f.read()
print(type(content))
f.close()
f = open('./files/timg.jpg', 'rb')
content = f.read()
print(content)
f.close()
f = open('./files/ti.jpg', 'wb')
f.write(content)
f.close()
2.文件不存在
'''
如果以讀的方式打開一個(gè)不存在的文件胯杭,程序會(huì)報(bào)錯(cuò)
如果以寫的方式打開一個(gè)不存在的文件驯杜,不會(huì)報(bào)錯(cuò),并且自動(dòng)創(chuàng)建這個(gè)文件
'''
3.打開文件的簡(jiǎn)寫
'''
1)語法
with open(文件路徑做个,讀寫方法鸽心,encoding=編碼方式) as 文件對(duì)象:
文件域(操作文件)
2)說明
以這種方式打開文件,在文件域結(jié)束后居暖,文件會(huì)自動(dòng)關(guān)閉
'''
with open('./files/text1.txt', 'r', encoding='utf-8') as f:
print(f.read())
json數(shù)據(jù)
import json
1.什么是json數(shù)據(jù) - 滿足json格式的數(shù)據(jù)
'''
1)json格式:
a.一個(gè)json有且只能用一個(gè)數(shù)據(jù)
b.這個(gè)數(shù)據(jù)必須是json支持的數(shù)據(jù)類型對(duì)應(yīng)的數(shù)據(jù)
2)json支持的數(shù)據(jù)類型
a.數(shù)字類型 - 包含所有的數(shù)字顽频,支持科學(xué)記數(shù)法;例如:100膝但,-45,0.67,3e4
b.字符串 - 使用雙引號(hào)引起來的字符集冲九,支持轉(zhuǎn)義字符和編碼字符,例如:"\u4e00abc","123"
c.布爾 - 只有true和false兩個(gè)值(都小寫)
d.數(shù)組 - 相當(dāng)于python中的列表,例如:["abc", 100, true, [1, 2]]
e.字典 - 相當(dāng)于python中的字典莺奸,key只能是字符串丑孩,例如:{"a": 100, "b": "abc", "c":[1, 2]}
f.null - 相當(dāng)于python中的None,表示空
'''
2.json轉(zhuǎn)python
'''
json python
數(shù)字類型 int或者float
字符串 str,字符串灭贷,雙引號(hào)可能會(huì)變單引號(hào)
布爾 bool
數(shù)組 列表(list),["abc", true] -> ['abc', True]
字典 dict
null None
2)方法
json.loads(字符串) - 將json格式的字符串轉(zhuǎn)換成對(duì)應(yīng)的python數(shù)據(jù)
注意:字符串的內(nèi)容必須是json格式的數(shù)據(jù)
'''
result = json.loads('123')
print(type(result), result)
result = json.loads('"abc"')
print(type(result), result)
result = json.loads('true')
print(type(result), result)
result = json.loads('[123, "abc", false, null]')
print(type(result), result)
result = json.loads('{"a": 100, "b": "hallo"}')
print(type(result), result)
3.python轉(zhuǎn)json
'''
1)轉(zhuǎn)換關(guān)系
python json
int/float 數(shù)字
str 字符串温学,單引號(hào)變成雙引號(hào)
bool 布爾,True -> true, False -> false
list/tuple 數(shù)組
dict 字典
None null
2)方法
dumps(數(shù)據(jù)) - 將數(shù)據(jù)轉(zhuǎn)換成json格式的字符串
'''
result = json.dumps(100)
print(type(result), result) # <class 'str'> '100'
result = json.dumps('abc')
print(type(result), result) # <class 'str'> '"abc"'
result = json.dumps([10, True, 'abc', [None, 100]])
print(type(result), result) # <class 'str'> '[10, true, "abc", [null, 100]]'