小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

 Python——文件操作

 狂想女巫Lucia 2022-02-27

一、文件的打開與關(guān)閉
1、文件的打開
Python中,open方法用來打開文件,語法格式如下:
open(文件名[, 訪問模式,encoding=編碼格式])
上述格式中,“文件名”必須要填寫,“訪問模式”和“encoding”是可選的。

注意:使用open方法打開文件時(shí),如果沒有注明訪問模式(默認(rèn)是只讀的訪問模式),則必須保證文件是存在的,否則就會(huì)報(bào)錯(cuò)。如下所示:

2、文件模式
如果使用open方法打開文件時(shí),只帶一個(gè)文件名,那么我們只能讀取文件。如果打開的文件允許寫數(shù)據(jù),則必須指明文件的模式。Python中文件的訪問模式有多種,如下所示:

  • r    以只讀方式打開文件(read)。文件的指針將會(huì)放在文件的開頭。默認(rèn)模式。
  • w   打開一個(gè)文件只用于寫入(write)。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件
  • a    打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建文件并寫入。
  • rb   以二進(jìn)制格式打開一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開頭。默認(rèn)模式。
  • wb  以二進(jìn)制格式打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件。
  • ab   以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建文件并寫入。
  • r+    打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。文件若不存在,程序會(huì)crash。
  • w+   打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件。
  • a+    打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建文件用于讀寫。
  • rb+   以二進(jìn)制格式打開一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開頭。
  • wb+  以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋;若文件不存在,創(chuàng)建新文件。
  • ab+   以二進(jìn)制格式打開一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。

3、文件的關(guān)閉
凡是打開的文件,切記要使用close方法關(guān)閉。即使文件會(huì)在程序退出后自動(dòng)關(guān)閉,但是考慮到數(shù)據(jù)的安全性,在每次使用完文件后,都要使用close方法關(guān)閉文件,否則一旦程序崩潰,
很可能導(dǎo)致文件中的數(shù)據(jù)沒有保存。close方法使非常簡單,如下所示:

  1. f = open('test.txt')
  2. f.close()

4、安全的打開關(guān)閉文件的方式(自動(dòng)調(diào)用close方法)

  1. with open("d://test.txt","w") as f:
  2. f.write("hello python")

或者

  1. with open("d://test.txt","w",endconding="utf-8") as f:
  2. f.write("hello 你好")

 

二、文件的讀寫
1、寫文件

1.1 向文件寫數(shù)據(jù),需要用到write方法來完成,在操作某個(gè)文件時(shí),每調(diào)用一次write方法,寫入的數(shù)據(jù)就會(huì)追加到文件末尾。示例如下所示:

  1. f = open('itheima.txt','w')
  2. f.write('hello itheima, i am here!')
  3. f.write('\n')
  4. f.write('hello itheima, i am here!')
  5. f.write('\n')
  6. f.write('hello itheima, i am here!')
  7. f.write('\n')

        注意:當(dāng)向文件寫入數(shù)據(jù)的時(shí)候,如果文件不存在,那么系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)文件并寫入數(shù)據(jù)。如果文件存在,那么會(huì)清空原來文件的數(shù)據(jù),重新寫入新的數(shù)據(jù)。

1.2  writelines向文件寫入一個(gè)字符串序列

  1. f = open("test.txt","w",encoding="utf-8")
  2. f.writelines(["張三\n","李四\n","王五\n"])
  3. f.close()

 

2、讀文件
從文件中讀取數(shù)據(jù)時(shí),可以通過多種方式來獲取,具體如下。
2.1 使用read方法讀取文件
read方法可以從文件中讀取數(shù)據(jù),該方法的定義語法如下:
read(size)
上述方法中,size表示要從文件中讀取的數(shù)據(jù)的長度,單位為字節(jié)。如果沒有指定size,那么就表示讀取文件的全部數(shù)據(jù)。

使用read方法讀取文件示例如下所示:

  1. f = open('itheima.txt','r')
  2. content = f.read(12)
  3. print(content)
  4. print('-'*30)
  5. content = f.read()
  6. print(content)
  7. f.close()

        注意:多次讀取文件時(shí),每次讀取文件都會(huì)接著上次讀取的位置讀后面的數(shù)據(jù)。

2.2 使用readlines方法讀取文件
如文件的內(nèi)容很少,則可以使用readlines方法把整個(gè)文件中的內(nèi)容進(jìn)行一次性讀取。readlines方法會(huì)返回一個(gè)列表,列表中的每一個(gè)元素為文件中的每一行數(shù)據(jù)。假設(shè)文件“itheima.txt”里面有3行數(shù)據(jù)“hello itheima, i am here!”,那么,使用readlines方法讀取文件的方式如下所示:

  1. f = open('itheima.txt','r')
  2. content = f.readlines()
  3. print(type(content))
  4. i = 1
  5. for temp in content:
  6. print("%d:%s" %(i,temp))
  7. i += 1
  8. f.close()

2.3 使用readline方法一行一行讀取數(shù)據(jù)

同樣,以讀取itheima.txt文件為例,該文件包含了三行數(shù)據(jù),那么使用readline方法讀取文件內(nèi)容的方式如下所示:

  1. f = open('itheima.txt','r')
  2. content = f.readline()
  3. print('1:%s'%content)
  4. content = f.readline()
  5. print('2:%s'%content)
  6. f.close()

思考題:

如果一個(gè)文件很大,如5GB,試想應(yīng)該怎么樣把文件的數(shù)據(jù)讀取到內(nèi)存然后進(jìn)行處理。

 

三、文件讀寫應(yīng)用--制作文件的備份
實(shí)際開發(fā)中,文件的讀寫可以完成很多功能,如文件的備份就是文件讀寫的過程。假設(shè),現(xiàn)在有一個(gè)文件“data.txt”,該文件存儲(chǔ)的數(shù)據(jù)如下所示:

        If you were a teardrop;In my eye,
        For fear of losing you,I would never cry.
        And if the golden sun,Should cease to shine its light,
        Just one smile from you,Would make my whole world bright.

此時(shí),如果想制作data.txt的備份文件,則需要讀取原文件的數(shù)據(jù),并將獲取的數(shù)據(jù)寫入備份文件。接下來,通過代碼演示,如下所示:

  1. oldFileName = input("Please enter the name of the file to be copied:")
  2. oldFile = open(oldFileName,'r')
  3. if oldFile:
  4. fileFlagNum = oldFileName.rfind('.')
  5. if fileFlagNum > 0:
  6. fileFlag = oldFileName[fileFlagNum:]
  7. newFileName = oldFileName[:fileFlagNum] + '[copy]' + fileFlag
  8. newFile = open(newFileName, 'w')
  9. for lineContent in oldFile.readlines():
  10. newFile.write(lineContent)
  11. oldFile.close()
  12. newFile.close()

 

四、文件的定位讀寫
通過前面的了解,文件的讀寫都是順序進(jìn)行的。但是在實(shí)際開發(fā)中,可能會(huì)需要從文件的某個(gè)特定位置開始讀寫,這時(shí),我們需要對(duì)文件的讀寫位置進(jìn)行定位,包括獲取文件
當(dāng)前的讀寫位置,以及定位到文件的指定讀寫位置。接下來詳細(xì)介紹這兩種定位方式。

1、使用tell方法來獲取文件當(dāng)前的讀寫位置
在讀寫文件的過程中,如果想知道當(dāng)前位置,可以使用tell方法獲取。tell方法返回文件的當(dāng)前位置,即文件指針當(dāng)前位置。

使用tell方法獲取文件當(dāng)前讀寫位置示例如下:

  1. f = open('test.txt','r')
  2. str = f.read(4)
  3. print('read data is :',str)
  4. position = f.tell()
  5. print('The current position :',position)
  6. str = f.read(8)
  7. print('read data is :',str)
  8. position = f.tell()
  9. print('The current position :',position)
  10. str = f.read(3)
  11. print('read data is :',str)
  12. position = f.tell()
  13. print('The current position :',position)
  14. f.close()

        2、使用seek方法定位到文件的指定位置

如果在讀取文件的過程中,需要從指定的位置開始讀寫操作,就可以使用seek方法實(shí)現(xiàn)。seek方法的定義語法如下:
seek(offset[, whence])
seek方法的參數(shù)介紹如下所示:
(1)offset:表示偏移量,也就是需要移動(dòng)的字節(jié)數(shù)
(2)whence: 表示方向,該參數(shù)的值有三個(gè):
SEEK_SET或者0,whence參數(shù)的默認(rèn)值,表示從文件的起始位置開始偏移
SEEK_CUR或者1,表示從文件當(dāng)前的位置開始偏移
SEEK_END或者2,表示從文件末尾開始偏移
 

使用seek方法獲取文件當(dāng)前讀寫位置示例如下:

  1. f = open('test.txt','r')
  2. str = f.read(15)
  3. print('read data is :',str)
  4. position = f.tell()
  5. print('The current position :',position)
  6. f.seek(4)
  7. position = f.tell()
  8. print('The current position :',position)
  9. f.close()

 

五、文件的重命名和刪除
有些時(shí)候,需要對(duì)文件進(jìn)行重命名、刪除等一些操作,Python的OS模塊已經(jīng)默認(rèn)包含了這些功能,接下來,詳細(xì)介紹這些操作。

1、文件的重命名
OS模塊的rename方法可以實(shí)現(xiàn)完成對(duì)文件的重命名操作,格式如下:
OS.rename(src,dst)
其中src指的是需要修改的文件名,dst指的是修改之后的新的文件名。
示例:

  1. import OS
  2. OS.rename('畢業(yè)論文.txt','畢業(yè)論文-最終版.txt')


2、文件的刪除
OS模塊的remove方法可以實(shí)現(xiàn)完成對(duì)文件的刪除操作,格式如下:
OS.remove(path)
path指的是指定路徑下的文件。

示例:

  1. import OS
  2. OS.remove('畢業(yè)論文.txt')


六、文件夾的相關(guān)操作
1、創(chuàng)建文件夾
    OS模塊的mkdir方法用來創(chuàng)建文件夾,示例代碼如下所示:

  1. import OS
  2. OS.mkdir('wzb')


2、獲取當(dāng)前目錄
OS模塊的getcwd方法用來獲取當(dāng)前的目錄,示例代碼如下所示:

  1. import OS
  2. OS.getcwd()


3、改變默認(rèn)目錄
OS模塊的chdir方法用來改變默認(rèn)目錄,例如,將當(dāng)前目錄改為上一級(jí)目錄,代碼如下所示:

  1. import OS
  2. OS.chdir('../')


4、獲取目錄列表
OS模塊的listdir方法用來獲取目錄列表,例如,要獲取當(dāng)前路徑下的子目錄,代碼如下所示:

  1. import OS
  2. OS.listdir('./')


5、刪除空文件夾
OS模塊的rmdir方法用來刪除文件夾,例如,下面的代碼刪除了當(dāng)前路徑下的“wzb”目錄:

  1. import OS
  2. OS.rmdir('wzb')

 

6、刪除非空文件夾

  1. import shutil
  2. shutil.rmtree("d://testdir123")

 

 

 

 

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多