欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python文件與文件夾操作大全(非常全面)

 更新時(shí)間:2023年09月15日 10:29:21   作者:由心同學(xué)  
Python具有強(qiáng)大的文件處理功能,如文件的創(chuàng)建、打開(kāi)、文件內(nèi)容的寫(xiě)入、讀出文件中的內(nèi)容等等,這篇文章主要介紹了Python文件與文件夾操作,需要的朋友可以參考下

前言:

計(jì)算機(jī)操作系統(tǒng)是以文件為單位對(duì)數(shù)據(jù)進(jìn)行管理的。文件是指存儲(chǔ)在某種介質(zhì)上的數(shù)據(jù)集合。文件在存儲(chǔ)介質(zhì)上的位置是由驅(qū)動(dòng)器名稱、文件夾以及文件名來(lái)定位的。Python具有強(qiáng)大的文件處理功能,如文件的創(chuàng)建、打開(kāi)、文件內(nèi)容的寫(xiě)入、讀出文件中的內(nèi)容等等。

1.文件基本操作:

1.1創(chuàng)建文件:

在Python中利用 open(file_name,code) 方法來(lái)創(chuàng)建(打開(kāi))文件(如果該文件已存在就直接打開(kāi),如果該文件不存在,就創(chuàng)建新文件)。

語(yǔ)法格式如下:

open(file_name,code)

參數(shù)說(shuō)明:

name:創(chuàng)建文件的名稱;

code:創(chuàng)建文件的模式。

code含義
‘w’打開(kāi)一個(gè)文件,只寫(xiě)
‘wb’以二進(jìn)制格式打開(kāi)一個(gè)文件,只寫(xiě)
‘w+’打開(kāi)一個(gè)文件,讀寫(xiě)
‘wb+‘以二進(jìn)制格式打開(kāi)一個(gè)文件,讀寫(xiě)
‘r’以只讀的方式打開(kāi)文件。文件指針位于文件開(kāi)頭
‘r+’打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針位于文件開(kāi)頭
‘rb’以二進(jìn)制格式打開(kāi)一個(gè)文件進(jìn)行讀寫(xiě)。文件指針位于文件開(kāi)頭,一般用于非文本文件(如,圖片)
‘a’打開(kāi)一個(gè)文件用于追加。若該文件已存在,則文件指針位于文件末尾,新的內(nèi)容將被被寫(xiě)入到原有內(nèi)容之后;若該文件不存在,則創(chuàng)建新文件進(jìn)行寫(xiě)入。
‘ab’以二進(jìn)制格式打開(kāi)一個(gè)文件,用于追加。若該文件已存在,則文件指針位于文件末尾,新的內(nèi)容將被被寫(xiě)入到原有內(nèi)容之后;若該文件不存在,則創(chuàng)建新文件進(jìn)行寫(xiě)入。
‘a+’打開(kāi)一個(gè)文件用于讀寫(xiě).文件指針位于文件末尾
‘ab+’以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針位于文件末尾

表1-1

注意:在 Python 中,以普通方式(文本模式)打開(kāi)或創(chuàng)建文件和以二進(jìn)制格式打開(kāi)或創(chuàng)建文件,主要有以下幾點(diǎn)不同:

數(shù)據(jù)的讀取與寫(xiě)入方式: 在文本模式下,文件中的內(nèi)容被視為字符串(在 Python 3 中為 Unicode 字符串),并且會(huì)自動(dòng)處理平臺(tái)特定的行結(jié)束符。在 Windows 上,行結(jié)束符為 \r\n,在 Unix/Linux 上為 \n。當(dāng)你從文件讀取或?qū)懭胛谋緯r(shí),Python 會(huì)自動(dòng)處理這些行結(jié)束符。但是,在二進(jìn)制模式下,數(shù)據(jù)則被視為原始字節(jié)流,不會(huì)對(duì)行結(jié)束符做任何處理。
編碼問(wèn)題: 在文本模式下,可以通過(guò) encoding 參數(shù)指定一個(gè)字符編碼方式,比如 UTF-8,ASCII等。當(dāng)你從文件讀取或?qū)懭胛谋緯r(shí),Python 會(huì)自動(dòng)根據(jù)指定的編碼方式對(duì)文本進(jìn)行編碼或解碼。但是,在二進(jìn)制模式下,由于數(shù)據(jù)被視為原始字節(jié)流,不涉及任何編碼和解碼的操作,所以不需要(也不能)指定字符編碼方式。
文件類型: 有些文件(比如圖片,音頻,視頻等)是以二進(jìn)制格式存儲(chǔ)的,這些文件必須以二進(jìn)制模式打開(kāi)。如果嘗試以文本模式打開(kāi)這些文件,可能會(huì)導(dǎo)致數(shù)據(jù)的損壞。
因此,在處理文件時(shí),應(yīng)根據(jù)文件的類型和需要處理的數(shù)據(jù)類型選擇適當(dāng)?shù)奈募蜷_(kāi)模式。如果你需要處理的是文本數(shù)據(jù),那么通常應(yīng)使用文本模式。如果你需要處理的是二進(jìn)制數(shù)據(jù)(比如圖片或音頻文件),或者需要進(jìn)行低級(jí)的文件操作(比如讀寫(xiě)固定數(shù)量的字節(jié)),那么應(yīng)使用二進(jìn)制模式。

#舉個(gè)栗子:
import os
txt = open("mytext.txt",'w')
print("成功創(chuàng)建一個(gè)文本文件,文件名為mytext.txt")
doc= open("myword.docx","wb+")
print("成功創(chuàng)建一個(gè)word文件,文件名為myword.docx")

1.2寫(xiě)入文件內(nèi)容:

文件創(chuàng)建成功后,就利用 write(string) 可以向文件中寫(xiě)入內(nèi)容。

語(yǔ)法格式如下: write(string)

參數(shù)及注意事項(xiàng)說(shuō)明:

string: 要寫(xiě)入文件中的字符串。但需要注意的是,Python字符串可以是二進(jìn)制字符串。特別是當(dāng),文件以二進(jìn)制模式創(chuàng)建時(shí), string 要利用 encode() 轉(zhuǎn)換為 bytes 形式,否則會(huì)報(bào)錯(cuò)

注意事項(xiàng): write() 方法的返回值為寫(xiě)入的字符長(zhǎng)度;

2. write() 方法不會(huì)在字符串的末尾添加換行符;

3.在文件關(guān)閉或緩沖區(qū)刷新前,字符串內(nèi)容還存儲(chǔ)在緩沖區(qū)中,在文件中是看不到寫(xiě)入的內(nèi)容的。

利用 close() 方法來(lái)關(guān)閉文件。

#舉個(gè)栗子
import os
import chardet
with open("mytxt.txt","wb+") as txt:
    txt.write("\n寫(xiě)入的信息如下:".encode())
    txt.write(("\n文件名:"+txt.name).encode())
    txt.write(("\n創(chuàng)建的模式:"+txt.mode).encode())
    txt.write("\n滿懷熱愛(ài),奔赴星海\n".encode())
    print(content)

運(yùn)行結(jié)果:

在這里插入圖片描述

1.3打開(kāi)文件夾并讀取內(nèi)容

在Python中打開(kāi)文件也用 open() 方法,與創(chuàng)建文件不同的只是 mode 模式不同。mode模式與含義見(jiàn)1.1表格。

import os
mytxt = open("../mytxt.txt","r")#以只讀方式打開(kāi)
str1 = mytxt.read(10)#獲取前10個(gè)字符
print("前10個(gè)字符為:",str1)
str2 = mytxt.read()#讀取剩余內(nèi)容
mytxt = read()
print("mytxt文件中的剩余全部?jī)?nèi)容為: ",str2)
mytxt.close()

1.4 設(shè)置文件中光標(biāo)的位置

當(dāng) mode r,r+,rb,rb+ 時(shí),打開(kāi)文件,光標(biāo)(文件指針)位于文件開(kāi)頭。

當(dāng) mode a,a+,ab,ab+ 時(shí),光標(biāo)位于文件末尾。

當(dāng)利用 read() 方法讀取文件中的部分內(nèi)容后,光標(biāo)就會(huì)移動(dòng)到這部分內(nèi)容的后面。

通常,我們?cè)谧x取文件內(nèi)容時(shí),可能不會(huì)從開(kāi)頭開(kāi)始讀取,而是從中間的某一位置開(kāi)始讀取,且不一定是連續(xù)讀取,所以,我們可以利用 tell()方法 獲取光標(biāo)的當(dāng)前位置, tell() 方法的的返回值是光標(biāo)在文件中的當(dāng)前位置;

利用 seek() 方法設(shè)置光標(biāo)在文件中的當(dāng)前位置。

seek(offset[, whence])

參數(shù)說(shuō)明:參數(shù) offset 用來(lái)設(shè)置偏移量,也就是代表需要偏移的字符數(shù),若為負(fù)數(shù)(逆序)則表示從倒數(shù)第多少位開(kāi)始。 whence: 可選參數(shù),默認(rèn)值為0,該參數(shù)給 offset 設(shè)定了一個(gè)起始位置,(0:從文件開(kāi)頭開(kāi)始偏移 offset 1:從當(dāng)前位置開(kāi)始偏移 offset ;2:從文件末未開(kāi)始偏移 offset

舉例說(shuō)明:

import os
s2 = "The error message you provided indicates a UnicodeDecodeError occurred while trying to decode a byte sequence using the 'gbk' codec. The specific error message suggests that there is an illegal multibyte sequence in the data you're trying to decode."
with open("1.txt", "w+",) as mytxt:
    mytxt.write(s2)
print("文件創(chuàng)建成功,并寫(xiě)入了內(nèi)容。\n")
print("讀取文件中的內(nèi)容:\n")
with open("1.txt", "rb") as myt:#二進(jìn)制模式打開(kāi)的文件對(duì)象支持隨機(jī)訪問(wèn)和非零定位操作。
    str_ = myt.read()  # 讀取文件中的所有內(nèi)容
    print(str_)
    print()
    position = myt.tell()  # 獲取光標(biāo)的當(dāng)前位置
    print("光標(biāo)的當(dāng)前位置為:", position)
    print()
    myt.seek(10, 0)
    str0 = myt.read(10)
    print(str0)
    print()
    myt.seek(10, 1)
    str1 = myt.read(10)
    print(str1)
    print()
    myt.seek(8, 2)
    str2 = myt.read(10)
    print(str2)
    print()
    myt.seek(-4, 2)
    str3 = myt.read(10)
    print(str3)
    print()

運(yùn)行結(jié)果:

文件創(chuàng)建成功,并寫(xiě)入了內(nèi)容。

讀取文件中的內(nèi)容:

b"The error message you provided indicates a UnicodeDecodeError occurred while trying to decode a byte sequence using the 'gbk' codec. The specific error message suggests that there is an illegal multibyte sequence in the data you're trying to decode."

光標(biāo)的當(dāng)前位置為: 249

b'message yo'

b' indicates'

b''

b'ode.'

2.文件夾的基本操作

2-1 文件夾的創(chuàng)建:

2-1-1.掌握一個(gè)方法: os.mkdir (path)

在Python中常用該方法來(lái)創(chuàng)建文件夾。

os.mkdir (path)

參數(shù)說(shuō)明:

path 是創(chuàng)建文件夾的路徑。該方法沒(méi)有返回值

2-1-2.理解兩條“路徑”:

1.絕對(duì)路徑: 從磁盤(pán)的根目錄開(kāi)始定位,直到對(duì)應(yīng)的位置為止。

2.相對(duì)路徑: 從當(dāng)前所在路徑開(kāi)始定位,直到對(duì)應(yīng)的位置為止。“.” 表示當(dāng)前目錄;用“. .”表示上一級(jí)目錄

舉個(gè)栗子:

import os
#------在相對(duì)路徑下創(chuàng)建文件夾----------------
#在當(dāng)前目錄下創(chuàng)建一個(gè)文件夾
os.mkdir("mydir1") 
#在當(dāng)前目錄的mydir1文件夾中創(chuàng)建一個(gè)子文件夾
os.mkdir("./mydir1/sub_mydir1")
#在當(dāng)目錄的上一級(jí)目錄下創(chuàng)建一個(gè)文件夾
os.mkdir("../up_mydir1")
#-------在絕對(duì)路徑下創(chuàng)建文件夾---------------
#在C盤(pán)根目錄下創(chuàng)建一個(gè)文件夾
os.mkdir("C:/mydir")
#在C盤(pán)的mydir文件夾中創(chuàng)建一個(gè)子文件夾
os.mkdir("C:/mydir/sub_mydir")
 print("創(chuàng)建成功!")

注意: 如果你創(chuàng)建的文件夾已經(jīng)存在,重復(fù)創(chuàng)建就會(huì)報(bào)錯(cuò),(即,上述創(chuàng)建文件夾的程序如果成功執(zhí)行,再次運(yùn)行就會(huì)報(bào)錯(cuò))。因此在創(chuàng)建文件夾時(shí),我們最好先判斷在該目錄下是否存在同名的文件夾。

2-2判斷文件夾是否存在

掌握一個(gè)方法: os.path.exists(path) 在Python中,利用該方法來(lái)判斷文件夾的路徑。該方法返回值為 True or False

舉個(gè)栗子

import os 
if os.path.exists("mydir1"):
   print("該文件夾已存在!")
else:
   print("該文件夾不存在,可以新建。")

2-3 文件夾重命名

2-3-1.掌握一個(gè)方法: os.rename(src,dst)

在Python中,利用該方法對(duì)文件夾進(jìn)行重命名。

參數(shù)說(shuō)明:

src: 文件夾原名;

dst: 文件夾新名;

2-3-2. 注意兩個(gè)要點(diǎn):

1.在對(duì)一個(gè)文件夾重命名之前,先判斷該文件夾是否已經(jīng)存在,只有該文件夾已經(jīng)存在,才有文件夾重命名操作的對(duì)象。

2. 對(duì)具體目錄下的某一文件夾重命名時(shí),需注意新名稱是否與該目錄下的其他文件夾重名。

舉個(gè)栗子

import os
if os.path.exists("mydir1"):
   print("該文件夾存在,可以重命名。")
   if os.path.exists("new_mydir1")
       print("sorry,new_mydir 文件夾已存在")
   else:
       print("new_mydir1文件夾不存在可以重命名。")
   	  os.rename("mydir1","new_mydir1")
   print("重命名成功。")
else:
   print("該文件夾不存在,無(wú)法進(jìn)行重命名操作!")

2-4 文件夾的刪除

2-4-1.一個(gè)方法:

os.rmdir(path) 在Python中,利用該方法來(lái)刪除文件夾。

path 為該文件夾的路徑,該方法沒(méi)有返回值.

4-2-2. 兩個(gè)要點(diǎn):

1.在進(jìn)行刪除操作前,應(yīng)先判斷,要?jiǎng)h除的文件夾是否已經(jīng)存在(即刪除操作有無(wú)操作對(duì)象)

2. os.rmdir(path) 方法只能刪除空的文件夾,即文件夾中不能有文件夾或文件。否則操作無(wú)法執(zhí)行??梢岳?os.listdir(path) 方法來(lái)查看文件夾中的文件夾或文件。該方法返回一個(gè)列表,其中包含由路徑指定的目錄中條目的名稱。

舉個(gè)栗子:

import os
if os.path.exists("C:/mydir"):
   print("該文件夾存在,可以刪除。")
   if len(os.listdir("C:/mydir/"))==0:
       os.rmdir("C:/mydir/")
       print("刪除成功")
   else:
       print("刪除操作無(wú)效,mydir 非空。")
else:
   print("該文件夾不存在,無(wú)法刪除!")

2-5 文件操作工具-------shutil模塊的應(yīng)用

在上述文件夾的刪除操作中,我們知道 os.rmdir(path) 方法只能刪除空的文件夾。如果要?jiǎng)h除非空文件夾又該如何操作?這時(shí)我們可以用 shutil 模塊來(lái)實(shí)現(xiàn)。 shutil 模塊是一個(gè)高層次的文件操作工具,其強(qiáng)大之處在于對(duì)文件的復(fù)制與刪除操作較為簡(jiǎn)便。

一個(gè)方法: shuitl.retree(path)

在Python中可利用 shuitl.retree(path) 方法來(lái)刪除非空文件夾。

舉個(gè)栗子:

import os
import shutil
if os.path.exists("C:/mydir"):
   print("該文件夾存在,可以刪除。")
   if len(os.listdir("C:/mydir/"))==0:
       os.rmdir("C:/mydir/")
       print("該空文件夾刪除成功")
 else:
       shutil.rmtree("C:/mydir/")
     print("mydir 非空。刪除成功。")
else:
 print("該文件夾不存在,無(wú)法刪除!")

3. 與文件夾和文件有關(guān)的其他操作

3-1 獲取和修改當(dāng)前文件夾的位置

在Python中,利用 os.getcwd() 方法可以獲取當(dāng)前文件夾的位置,注意該方法沒(méi)有參數(shù)。使用 os.chdir(path) 可以修改當(dāng)前文件夾的位置。

3-2 連接目錄和文件名

Python中,利用 os.path.join(dir, filename) 方法可以連接目錄和文件名

參數(shù)說(shuō)明:

dir :文件的目錄

filename :目錄中的文件名

舉例說(shuō)明

import os
str1 = os.getcwd()
list_ = []
print("顯示當(dāng)前文件夾中包含的所有文件絕對(duì)路徑")
for file in os.listdir(str1):
	filepath = os.path.join(str,file)
	list1.append(filepath)
	print(list1)

3-3 文件的屬性信息

在Python中,利用 os.stst(filename) 方法查看文件的屬性信息, filename 是要查看的文件名稱。

#文件中某個(gè)字全部替換為另一個(gè)字

import os
import shutil
def replace(filename,rep_word, new_word):
        f_read = open(filename,"w+")
        content = []
        count = 0
        for eachline in f_read:
            if rep_word in eachline:
                count += eachline.count(rep_word)
                eachline = eachline.replace(rep_word,new_word)
            content.append(eachline)
        decide = input("\n文件%s中共有%s個(gè)%s, 您確定要全部替換為%s嗎?\n Yes/No:"\
            %(filename, count, rep_word,new_word))
        if decide in ["YES","yes","Yes"]:
            f_write = open(filename,"w")
            f_write.write(filename)
            f_write.writelines(content)
            f_write.close()
        f_read.close()
if __name__ == "__main__":
    filename = input("Please enter filename:")
    rep_word = input("Please enter the word you want to replace :")
    new_word = input("Please enter the new_word:")
    replace(filename,rep_word,new_word)
    str = open(filename,"r")
    print(str)

3-4文件的復(fù)制與刪除

在Python中,利用 shutil.copy(oldfile,newfile) 方法可以復(fù)制文件,其中, oldfile 為原來(lái)的文件名, newfile 副本的文件名。刪除文件可以使用 os.remove(file) ,其中參數(shù) file 為要?jiǎng)h除的文件名。

import os 
import shutil 
#復(fù)制文件
str = open("2.txt","w+")
if os.path.exists("2.txt"):
    shutil.copy("2.txt","new_2.txt")
    str_copy = open("new_2.txt","r")
    print(str_copy)
#刪除文件
if os.path.exists("new_1.txt"):
    os.remove("new_1.txt")
關(guān)于Python的文件操作,我們先分享到這里,謝謝各位大佬的閱讀。

到此這篇關(guān)于Python文件與文件夾操作(你想了解的基本都在這)的文章就介紹到這了,更多相關(guān)python文件與文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pycharm在指定目錄下生成文件和刪除文件的實(shí)現(xiàn)

    Pycharm在指定目錄下生成文件和刪除文件的實(shí)現(xiàn)

    這篇文章主要介紹了Pycharm在指定目錄下生成文件和刪除文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 淺析AST抽象語(yǔ)法樹(shù)及Python代碼實(shí)現(xiàn)

    淺析AST抽象語(yǔ)法樹(shù)及Python代碼實(shí)現(xiàn)

    Abstract Syntax Tree抽象語(yǔ)法樹(shù)簡(jiǎn)寫(xiě)為ATS,是相當(dāng)于用樹(shù)結(jié)構(gòu)將代碼程式表現(xiàn)出來(lái)的一種數(shù)據(jù)結(jié)構(gòu),這里我們就來(lái)淺析AST抽象語(yǔ)法樹(shù)及Python代碼實(shí)現(xiàn)
    2016-06-06
  • Python3中的列表生成式、生成器與迭代器實(shí)例詳解

    Python3中的列表生成式、生成器與迭代器實(shí)例詳解

    這篇文章主要介紹了Python3中的列表生成式、生成器與迭代器,結(jié)合實(shí)例形式詳細(xì)分析了Python3列表生成式、生成器與迭代器相關(guān)概念、功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • Python?Logistic邏輯回歸算法使用詳解

    Python?Logistic邏輯回歸算法使用詳解

    這篇文章主要介紹了Python?Logistic邏輯回歸算法使用的方法和原理,Logistic雖然不是十大經(jīng)典算法之一,但卻是數(shù)據(jù)挖掘中常用的有力算法,所以這里也專門(mén)進(jìn)行了學(xué)習(xí),需要的朋友可以參考下
    2021-06-06
  • Python+PyQt5實(shí)現(xiàn)自動(dòng)點(diǎn)擊神器

    Python+PyQt5實(shí)現(xiàn)自動(dòng)點(diǎn)擊神器

    這篇文章主要為大家詳細(xì)介紹了如何利用Python和PyQt5實(shí)現(xiàn)自動(dòng)點(diǎn)擊神器,旨在解決重復(fù)性的點(diǎn)擊工作,解放雙手,具有及時(shí)性和準(zhǔn)確性,需要的可以參考下
    2024-01-01
  • 新手該如何學(xué)python怎么學(xué)好python?

    新手該如何學(xué)python怎么學(xué)好python?

    怎么學(xué)好python?怎么靈活應(yīng)用python?
    2008-10-10
  • Python利用百度地圖獲取兩地距離(附demo)

    Python利用百度地圖獲取兩地距離(附demo)

    本文主要介紹了Python利用百度地圖獲取兩地距離,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Flask框架Flask-Principal基本用法實(shí)例分析

    Flask框架Flask-Principal基本用法實(shí)例分析

    這篇文章主要介紹了Flask框架Flask-Principal基本用法,結(jié)合實(shí)例形式分析了Flask框架flask-principal擴(kuò)展的基本功能、安裝、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python 正則表達(dá)式的高級(jí)用法

    Python 正則表達(dá)式的高級(jí)用法

    作為一個(gè)概念而言,正則表達(dá)式對(duì)于Python來(lái)說(shuō)并不是獨(dú)有的。但是,Python中的正則表達(dá)式在實(shí)際使用過(guò)程中還是有一些細(xì)小的差別。本文是一系列關(guān)于Python正則表達(dá)式文章的其中一部分。
    2016-12-12
  • python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶

    python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶

    這篇文章主要介紹了python 添加用戶設(shè)置密碼并發(fā)郵件給root用戶的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07

最新評(píng)論