溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python文件操作的方法是什么

發(fā)布時間:2021-11-30 17:30:04 來源:億速云 閱讀:130 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Python文件操作的方法是什么”,在日常操作中,相信很多人在Python文件操作的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python文件操作的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

    1. 字典的相關(guān)函數(shù)

    字典的相關(guān)函數(shù)

    # ### 字典的相關(guān)函數(shù)
    dic = {}
    # 增
    # 1.普通方法  (推薦)
    dic["top"] = "369"
    dic["middle"] = "左手"
    dic["bottom"] = "杰克愛"
    print(dic)
    # 2.fromkeys 使用一組鍵和默認值創(chuàng)建字典
    tup = ("a","b","c")
    # fromkeys(盛放鍵的容器,默認值)
    dic = {}.fromkeys(tup,None)
    print(dic)
    # 注意點 (字典中的三個鍵默認指向的是同一個列表)
    dic= {}.fromkeys(tup,[])
    print(dic)
    dic["a"].append(1)
    print(dic)
    # 改造
    dic = {}
    dic["top"] = []
    dic["middle"] = []
    dic["bottom"] = []
    dic["top"].append("the boy")
    print(dic)
    # 刪
    dic = {'top': '369', 'middle': '左手', 'bottom': '杰克愛'}
    #pop()       通過鍵去刪除鍵值對 (若沒有該鍵可設(shè)置默認值,預(yù)防報錯)
    res = dic.pop("middle")
    print(res)
    print(dic)
    # 可以給pop設(shè)置第二個參數(shù)值,以防止鍵不存在時報錯
    res = dic.pop("middle1234","該鍵不存在")
    print(res)
    #popitem()   刪除最后一個鍵值對 
    dic = {'top': '369', 'middle': '左手', 'bottom': '杰克愛'}
    res = dic.popitem()
    print(res)
    print(dic)
    #clear()  清空字典
    dic.clear()
    print(dic)
    # 改
    #update() 批量更新(有該鍵就更新,沒該鍵就添加)
    # 推薦使用
    # 沒該鍵就添加
    dic_new = {"jungle":"karsa","support":"寶藍"}
    dic = {'top': '369', 'middle': '左手', 'bottom': '杰克愛'}
    dic.update(dic_new)
    print(dic)
    # 有該鍵就更新
    dic_new = {"top":"the bug","support":"xboyww","xiaozhang":"王思聰"}
    dic.update(dic_new)
    print(dic)
    # (了解)
    dic.update(ww="王文",zl="張磊")
    print(dic)
    # 查
    # get()    通過鍵獲取值(若沒有該鍵可設(shè)置默認值,預(yù)防報錯)
    dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聰"}
    # res = dic["top123"]
    # get 在獲取字典鍵時,如果不存在,不會發(fā)生任何報錯,返回的是None
    res = dic.get("top123")
    # 可以在獲取不到該鍵時,給與默認值提示.
    res = dic.get("top123","抱歉,該鍵不存在")
    print(res)
    # 其他操作
    #keys()   將字典的鍵組成新的可迭代對象
    dic = {"top":"the bug","support":"xboyww","xiaozhang":"王思聰"}
    res = dic.keys()
    print(res , type(res))
    #values() 將字典中的值組成新的可迭代對象 ***
    res = dic.values()
    print(res , type(res))
    #items()  將字典的鍵值對湊成一個個元組,組成新的可迭代對象 ***
    res = dic.items()
    print(res , type(res))
    
    # for i in res:
    	# print(i)
    for k,v in res:
    	print(k,v)

    2. 集合的操作_函數(shù)

    集合的相關(guān)操作 (交差并補)

    Python文件操作的方法是什么

    # ### 1.集合的相關(guān)操作 (交差并補)
    # intersection() 交集 
    set1 = {"易烊千璽","王一博","劉某PDD","王文"}
    set2 = {"倪萍","趙忠祥","金龜子大風(fēng)車","小龍人","王文"}
    res = set1.intersection(set2)
    print(res)
    # 簡寫 &
    res = set1 & set2
    print(res)
    # difference()   差集   
    res = set1.difference(set2)
    print(res)
    #  簡寫 -
    res = set1 - set2
    print(res)
    #union()  并集  
    res = set1.union(set2)
    print(res)
    #  簡寫 |
    res = set1 | set2
    print(res)
    #symmetric_difference() 對稱差集 (補集情況涵蓋在其中)
    res = set1.symmetric_difference(set2)
    print(res)
    #  簡寫 ^
    res = set1 ^ set2
    print(res)
    
    #issubset()   判斷是否是子集
    set1 = {"劉德華","郭富城","張學(xué)友","王文"}
    set2 = {"王文"}
    res = set2.issubset(set1)
    print(res)
    #  簡寫 
    res = set2 < set1
    print(res)
    
    #issuperset  判斷是否是父集
    set1 = {"劉德華","郭富城","張學(xué)友","王文"}
    set2 = {"王文"}
    res = set1.issuperset(set2)
    print(res)
    # 簡寫
    res = set1 > set2
    print(res)
    #isdisjoint() 檢測兩集合是否不相交  不相交 True  相交False
    set1 = {"劉德華","郭富城","張學(xué)友","王文"}
    set2 = {"王文"}
    res = set1.isdisjoint(set2)
    print(res)
    # ### 2.集合的相關(guān)函數(shù)
    # 增
    #add()    向集合中添加數(shù)據(jù)
    # 一次加一個
    set1 = {"王文"}
    set1.add("王偉")
    print(set1)
    #update() 迭代著增加
    # 一次加一堆
    set1 = {"王文"}
    lst = ["a","b","c"]
    lst = "ppp" # 迭代這添加,無序,會自動去重
    set1.update(lst)
    print(set1)
    # 刪
    setvar = {'劉某PDD', '小龍人','倪萍', '趙忠祥'}
    #clear()   清空集合
    # setvar.clear()
    # print(setvar)
    #pop()     隨機刪除集合中的一個數(shù)據(jù)
    # res = setvar.pop()
    # print(res)
    # print(setvar)
    #discard() 刪除集合中指定的值(不存在的不刪除 推薦使用) ***
    setvar.discard("劉某PDD111111") # success
    # setvar.discard("劉某PDD")
    # print(setvar)
    #remove()  刪除集合中指定的值(不存在則報錯) (了解)
    # setvar.remove("劉某PDD111") # error
    # setvar.remove("劉某PDD")
    # print(setvar)
    # ### 3.冰凍集合 (額外了解)
    """frozenset 單純的只能做交差并補操作,不能做添加或者刪除的操作"""
    lst = ["王文","宋健","何旭彤"]
    fz1 = frozenset(lst)
    print(fz1, type(fz1))
    
    # 不能再冰凍集合中添加或者刪除元素
    # fz1.add(1)
    # fz1.update("abc")
    # fz1.discard("王文")
    # 冰凍集合只能做交差并補
    lst2 = ["王文","王同培","劉一縫"]
    fz2 = frozenset(lst2)
    print(fz2, type(fz2))
    # 交集
    res = fz1 & fz2
    print(res)
    # 遍歷冰凍集合
    for  i in fz2:
    	print(i)

    3. 文件基本操作

    # ### 文件操作
    """
    語法:
    fp = open(文件,模式,編碼集)
    fp => 文件的io對象 (文件句柄)
    i => input  輸入
    o => outpur 輸出
    fp.read()  讀取文件內(nèi)容
    fp.write() 寫入文件的內(nèi)容
    """
    # 1.文件的寫入操作
    # (1) 打開文件
    fp = open("ceshi1.txt",mode="w",encoding="utf-8")# 打開冰箱門
    # (2) 寫入內(nèi)容
    fp.write("把大象懟進去") # 把大象懟進去
    # (3) 關(guān)閉文件
    fp.close() # 把冰箱門關(guān)上
    # 2.文件的讀取操作
    # (1) 打開文件
    fp = open("ceshi1.txt",mode="r",encoding="utf-8")
    # (2) 讀取內(nèi)容
    res = fp.read()
    # (3) 關(guān)閉文件
    fp.close()
    print(res)
    # 3.文件存儲二進制字節(jié)流
    """
    二進制字節(jié)流:`用于傳輸數(shù)據(jù)或者存儲數(shù)據(jù)的一種數(shù)據(jù)格式
    b"abc" b開頭的字節(jié)流要求數(shù)據(jù)只能是ascii編碼中的字符,不能是中文
    # 將字符串和字節(jié)流(Bytes流)類型進行轉(zhuǎn)換 (參數(shù)寫成轉(zhuǎn)化的字符編碼格式)
        #encode() 編碼  將字符串轉(zhuǎn)化為字節(jié)流(Bytes流)
        #decode() 解碼  將Bytes流轉(zhuǎn)化為字符串
    """
    data = b"abc"
    data = "中文".encode("utf-8")
    print(data,type(data))
    res = data.decode("utf-8")
    print(res,type(res))
    # utf-8下 一個中文占用3個字節(jié)
    data = "中文".encode("utf-8")
    # 計算字節(jié)總大小
    print(len(data))
    # 把中字這個字節(jié)流進行反解恢復(fù)成原來中的字符 "中"
    res = b"\xe4\xb8\xad".decode()
    print(res)
    # 4.文件存儲二進制的字節(jié)流
    """如果存儲的是二進制字節(jié)流,指定模式wb,不要指定encoding編碼集,否則報錯""" 
    fp = open("ceshi2.txt",mode="wb")
    strvar = "紅鯉魚綠鯉魚與驢".encode("utf-8")
    fp.write(strvar)
    fp.close()
    # 5.文件讀取二進制的字節(jié)流
    fp = open("ceshi2.txt",mode="rb")
    res = fp.read()
    fp.close()
    print(res)
    print(res.decode())
    # 6.復(fù)制文件
    """所有的圖片,音頻,視頻都需要通過二進制字節(jié)流來進行存儲傳輸."""
    # 先把原文件的二進制字節(jié)流讀取出來
    # 相對路徑找集合.png 相對于當(dāng)前3.py這個文件
    # fp = open("集合.png",mode="rb")
    # 絕對路徑找集合.png 從最底層一級一級往上找
    fp = open(r"D:\python32_python\day01\集合.png",mode="rb")
    res = fp.read()
    fp.close()
    # 計算文件中的字節(jié)個數(shù) => 文件大小
    print(len(res))
    # 在把二進制字節(jié)流寫入到另外一個文件中,相當(dāng)于復(fù)制
    fp = open("集合2.png",mode="wb")
    fp.write(res)
    fp.close()

    4. 文件擴展模式

    文件操作的擴展模式

    # ### 文件操作的擴展模式
    """
    # (utf-8編碼格式下 默認一個中文三個字節(jié) 一個英文或符號 占用一個字節(jié))
        #read()		功能: 讀取字符的個數(shù)(里面的參數(shù)代表字符個數(shù))
    		注意:從當(dāng)前光標(biāo)往右邊讀
        #seek()		功能: 調(diào)整指針的位置(里面的參數(shù)代表字節(jié)個數(shù))
    		seek(0)   把光標(biāo)移動到文件的開頭
    		seek(0,2) 把光標(biāo)移動到文件的末尾
        #tell()		功能: 當(dāng)前光標(biāo)左側(cè)所有的字節(jié)數(shù)(返回字節(jié)數(shù))
    """
    # 1.r+ 先讀后寫
    """
    fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
    # 先讀
    res = fp.read()
    # 在寫
    fp.write("ab")
    # 在讀
    fp.seek(0) # 通過seek把光標(biāo)移動到開頭
    print(fp.read())
    fp.close()
    """
    # 2.r+ 先寫后讀
    """
    fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
    # 移動光標(biāo)到最后,否則r模式下,原字符會被覆蓋
    fp.seek(0,2)
    # 先寫
    fp.write("cd")
    # 把光標(biāo)移動到文件的開頭
    fp.seek(0)
    # 在讀
    res = fp.read()
    print(res)
    fp.close()
    """
    # 3.w+ 可讀可寫,清空重寫(默認可以創(chuàng)建新的文件)
    """
    fp = open("ceshi4.txt",mode="w+",encoding="utf-8")
    fp.write("abc")
    fp.seek(0)
    print(fp.read())
    fp.close()
    """
    # 4.a+ 可讀可寫,追加寫入 (默認可以創(chuàng)建新的文件)
    """
    fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
    fp.write("def")
    # 讀內(nèi)容
    fp.seek(0)
    print(fp.read())
    fp.close()
    """
    # 5.r+和a+區(qū)別
    """
    r+模式基于當(dāng)前光標(biāo)所在位置進行寫入覆蓋
    a+模式會強制把光標(biāo)放到文件末尾進行追加寫入
    """
    """
    # fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
    fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
    fp.seek(3) # 從頭數(shù) 3個字節(jié)的位置
    # fp.write("zxc") # 模式會強制把光標(biāo)放到文件末尾進行追加寫入
    print(fp.read())
    fp.close()
    """
    # 6.seek,tell,read之間的使用
    fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
    fp.seek(4)
    # tell 當(dāng)前光標(biāo)左邊所有內(nèi)容的字節(jié)數(shù)
    res = fp.tell()
    print(res)
    # 在r+模式下 read(2) 代表讀取2個字符 在rb模式下 read(2) 代表讀取2個字節(jié)
    fp.read(2) # 當(dāng)前光標(biāo)往右所有的字符內(nèi)容
    print(fp.tell())
    fp.close()
    # 7.注意點 (seek在移動時,又可能移動到某個漢字的字節(jié)中間,導(dǎo)致原字節(jié)無法解析)
    """
    fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
    fp.seek(3)
    print(fp.read())
    fp.close()
    # print("你".encode())
    # b'\xe4\xbd\xa0'
    """
    # 8.with語法 自動實現(xiàn)文件關(guān)閉操作
    # 方法一.讀取二進制字節(jié)流
    """
    with open("集合2.png",mode="rb") as fp:
    	res = fp.read()
    with open("集合3.png",mode="wb") as fp:
    	fp.write(res)
    """
    # 方法二.繼續(xù)簡化
    with open("集合3.png",mode="rb") as fp1 , open("集合4.png",mode="wb") as fp2 :
    	res = fp1.read()
    	fp2.write(res)

    小提示:

    字符串、列表、元組用+做一個拼接
    集合無序去重的
    如果這個數(shù)據(jù)不想讓別人任意修改,就把這些集合給冰凍起來
    open一個類,來創(chuàng)建一個對象
    decode(),括號里面不寫,默認是utf-8
    w模式,如果文件已經(jīng)存在,也是先清空然后在寫入內(nèi)容 
    a模式,只能追加數(shù)據(jù),不能讀取數(shù)據(jù)  a+可以讀取數(shù)據(jù),讀取數(shù)據(jù)不受影響,seek可以用(會強制把光標(biāo)放到文件末尾進行追加寫入,用seek移動光標(biāo)也是沒有用的)
    seek移動字節(jié)的時候還是應(yīng)該慎用,因為一個中文字符占3個字節(jié),一個應(yīng)為字符占用一個字節(jié),如果一個中文沒有截取完整則會報錯
    seek(0)  seek(0,2) 還有純英文的 純中文的文件使用seek
    事實上,在移動我們的內(nèi)容的位置用的不是seek、而是通過read readline等
    文件,后面的的那些函數(shù)來實現(xiàn)的
    關(guān)閉文件這個操作必須要寫

    到此,關(guān)于“Python文件操作的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI