python文件操作

一、打開文件

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

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