一、打開文件
open(file,mode='r',encoding=None) -以指定的模式打開指定文件并返回一個(gè)文件對象
說明:file - 文件路徑,字符串類型
絕對路徑:文件/文件夾的全路徑(一般不寫絕對路徑)
相對路徑:只寫文件絕對路徑的一部分,另外一部分用特殊符號代替
./ - 表示當(dāng)前目錄(可以省略)
mode - 打開方式,字符串類型
第一組:控制操作類型
r - 以只讀的方式打開文件(默認(rèn)值)
w - 以只寫的方式打開文件(打開前先清空原文件的內(nèi)容)
a - 以只寫的方式打開文件(打開前不會清空原文件的內(nèi)容)
第二組:控制數(shù)據(jù)類型(文本-str/二進(jìn)制數(shù)據(jù)-bytes)
t - 操作的數(shù)據(jù)是文本數(shù)據(jù)(默認(rèn))
b - 操作的數(shù)據(jù)是二進(jìn)制數(shù)據(jù)
注意:每一組值只選一個(gè),兩組值進(jìn)行組合使用
encoding = 'utf-8'
注意:如果打開方式帶b,不能設(shè)置encoding
總結(jié):文本文件打開的時(shí)候可以是t也可以是b,二進(jìn)制文件只能是b打開(圖片文件,音頻、視頻等)
二、打開方式
方式一:
文件對象 = open(文件路徑,文件打開方式,encoding=文件編碼方式)
操作文件對象
文件對象.close()
方式二:
with open(文件路徑,文件打開方式,encoding=文件編碼方式)as 文件對象:
操作文件對象
三、文件操作
1、文件讀操作
1)文件對象.read() - 從文件讀寫位置開始,讀到文件結(jié)尾。(默認(rèn)情況下讀寫位置在文件開頭)
2)文件對象.readline() - 讀文本文件的一行內(nèi)容(從當(dāng)前讀寫位置讀到一行結(jié)束)
3)文件對象.readlines() - 一行一行的讀,讀完為止,返回的是一個(gè)列表,列表中的元素是列表中每一行的值
# 練習(xí):一行一行讀,讀完為止
def read_file(file):
with open(file,'r',encoding='utf-8')as f:
while True:
contend = f.readline()
if not contend:
break
print(contend)
read_file('text')
2、文件寫操作
文件對象.write(內(nèi)容)
數(shù)據(jù)持久化的基本操作
1.數(shù)據(jù)保存在文件中
2.需要數(shù)據(jù)的時(shí)候從文件中去讀數(shù)據(jù)
3.當(dāng)數(shù)據(jù)發(fā)生改變的時(shí)候,對保存數(shù)據(jù)的文件進(jìn)行更新
如果以讀的方式打開一個(gè)不存在的文件,程序會報(bào)錯(cuò);如果以寫的方式打開一個(gè)不存在的文件,不會報(bào)錯(cuò)并新建該名字文件
# 練習(xí)寫一個(gè)程序統(tǒng)計(jì)程序的啟動次數(shù)
with open('text1','r',encoding='utf-8')as f:
count =int(f.read())
count += 1
print(count)
with open('text1','w',encoding='utf-8')as f:
f.write(str(count))
# 寫程序?qū)崿F(xiàn)添加學(xué)生的功能,要求每次運(yùn)行程序添加的學(xué)生,下次還在
def add_stu():
while True:
name = input('輸入姓名:')
with open('text1','a',encoding='utf-8')as f:
f.write('\nname:')
f.write(name)
with open('text1','r',encoding='utf-8')as f:
print(f.read())
add_stu()
names = ['張三','李四']
students = [
{'name':'張三','age':18},
{'name':'張三','age':18},
{'name':'張三','age':18},
{'name':'張三','age':18},
]
# 1.字典和列表的寫操作:先將字典或列表轉(zhuǎn)換成字符串
with open('text2','w',encoding='utf-8')as f:
f.write(str(students))
# 2.字典和列表的讀操作:將容器格式的字符串轉(zhuǎn)換成對應(yīng)的容器型數(shù)據(jù)類型
with open('text2','r',encoding='utf-8')as f:
content = f.read()
print(content)
new_content = eval(content)
print(new_content)
for item in new_content:
print(item)
print(type(item))
def add_student():
while True:
name = input('姓名')
age = input('年齡')
tel = input('電話')
students = {'name':name,'age':age,'tel':tel}
with open('students','r',encoding='utf-8')as f:
all_students = eval(f.read())
all_students.append(students)
with open('students','w',encoding='utf-8')as f:
f.write(str(all_students))
print(all_students)
add_student()