日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

零基础学习 Python 之文件

發布時間:2023/12/15 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 零基础学习 Python 之文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

讀取文件

假設你已經在某個文件夾下創建了 “test.txt” 文件,且里面有一些內容,那你在當前位置輸入 Python3,進入到交互模式,然后執行下面的操作:

>>> f = open('test.txt') >>> for line in f: ... print(line) ... My name is RockyI love Python 復制代碼

這里提醒大家注意一下,如果是在該文件所在的位置啟動的 Python 交互模式,那么按照上面的方法 open(‘test.txt’) 打開文件,這意味著 test.txt 是在當前文件夾下的,如果要打開其它文件夾下的文件,要使用相對路徑或者絕對路徑來表示,從而讓 Python 能找到那個文件。

看上面的例子,open() 一個文件,即生成了一個對象,把這個對象賦值給變量 f,從而讓變量 f 和文件對象之間建立了引用關系,接下來用 for 循環讀取文件中的內容,把讀到的文件中的每行賦值給變量 line (這里的每行可以看作是對象),從打印的結果看,每一行與你讀取的文件的每一行是相同的。

如果你做完了上述操作,那么請看下面的操作:

>>> for line1 in f: ... print(line1) ... >>> 復制代碼

你會奇怪的發現,竟然什么也沒有,是不是出錯了?其實并沒有,因為之前已經讀取過一次文件的內容了,并且到了文件的末尾,再重復操作,就要從文章的末尾開始讀了,當然就沒有什么東西了,在 Python 中并不會認為這是錯誤。如果你想再次讀取的話,請重新 open() 一下文件。

創建文件

讀文件只是針對文件的操作之一,還有創建文件。

在上面讀文件的時候,我們打開的是一個已經存在的文件,那么如何創建一個新文件呢?請看下面的操作:

>>> new_file = open('new.txt','w') >>> new_file.write('this is a new file') 18 >>> new_file.close() 復制代碼

new_file = open(‘new.txt’,’w’) 意味著在當前的目錄下創建了一個名為 new_file 的文件,該文件為 “w” 打開模式。

new_file.write('this is a new file’) 則是向已建立的新文件中寫入 “this is a new file”,并且返回的是寫入字符串的長度。

new_file.close() 則是關閉當前文件,然后將寫入的話保存到文件中。

由上面的例子我們可以看出,創建文件我們同樣用的是 open() ,但是多了個 “w” ,這是告訴 Python 用什么模式打開文件。在 Python 中,可以用很多不同的模式打開文件,請看下圖(截圖來自菜鳥教程):

從上圖中可以看出,不同的模式下打開文件可以進行不同的讀寫操作,如果什么都不寫的話,默認為以只讀(r)的方式打開文件。

使用 with 自動關閉文件

在前面的操作中我們可以看到,在對文件進行寫操作之后,要執行關閉文件的操作,執行關閉文件的操作是為了將寫入的內容保存到文件中,如果不進行 close() 操作的話,那么新寫入的內容將不會被保存。

Python 早就知道會有很多馬大哈們會忘記 close()的操作,所以它創建了一種簡單的方法,這就是 with,它會實現自動關閉文件,看!Python 是多么的人性化!請看下面的操作:

>>> new_file.close() >>> with open('new.txt','a') as f: ... f.write(‘\nwith is good good good.') ... 23 復制代碼

在這里 with 其實是要發起一個語句的,這里兼具了后面我會講的 try/finally,即可以在遇到異常的時候發出提醒,此處暫時先不講,等以后我再細說,我們先學會用 with。

>>> with open('new.txt') as f: ... print(f.read()) ... this is a new file with is good good good. 復制代碼

看吧,在 with 中我們可以放輕松的扔掉 close 了,上面例子中用到的 read() 方法,在明天的文章中我會講到。

文件的屬性

很多時候,我們需要獲取一個文件的有關屬性,比如文件的創建日期,修改日期等等,在 Python 中有一個專門針對時間設計的模塊 -- time。請看下面的操作:

>>> import time >>> time.localtime() time.struct_time(tm_year=2018, tm_mon=7, tm_mday=25, tm_hour=21, tm_min=49, tm_sec=32, tm_wday=2, tm_yday=206, tm_isdst=0) 復制代碼

其實還有一種辦法可以查看文件的這些屬性,就是 os 模塊里的 stat,在這里我就是提一嘴,之后講到 os 模塊的時候再仔細說。

讀取文件的內容

因為文件的對象是可迭代的,所以能夠用open() 打開文件,所以用 for 循環可以將文件的內容讀出來。我在前面的文章說過,可以用 dir() 查看文件對象的屬性和方法,當你看了以后你會發現有 3 個方法 read / readline / readlines,單單從名稱上看,它們應該和讀有關系,事實上確實是這樣的,但是它們 3 個又有些微的差別。

1.read()

文件對象的 read() 方法,其實完整的寫出來其實是 read( size ),只不過里面的參數可以省略,如果不省略,則讀取文件中的 size 個字符并返回一個字符串;如果省略的話,則讀取文件對象的字符知道 EOF,EOF == End - of - file。

>>> f = open('new.txt') >>> f.read(10) 'this is a ' >>> f.read() 'new filewith is good good good.’ 復制代碼

如果你是按照上述的例子依次進行操作的,就會在 f.read() 后出現上述的結果,這主要是因為在前面已經 read(12) 了,指針已經移動到了第 12 個字符后面。

2.readline() & readlines()

readline() 就是它表面的意思,逐行讀取文件的內容。

>>> f = open('new.txt') >>> f.readline() 'this is a new filewith is good good good.' >>> f.readline() '' 復制代碼

每次執行 readline() 的時候它只讀一行,直到最后一行,如果還執行 readline() 的話,它不會報錯,返回的是空字符串。

同樣也是有 readline(size) 的,如果給 readline(size) 參數,則讀取相應行的 size 個字符,有興趣的可以自己試一下。

還有一個是 readlines(),它的作用是將文件中各行讀出來,放到一個列表中返回。

>>> f = open('test.txt') >>> f.readlines() ['My name is Rocky\n', 'I love Python’] 復制代碼

既然返回的是一個列表,那么就能用 for 循環讀取列表元素,再觀察一下可以發現,列表中的每個元素都是文件的一行,并且是字符串。

>>> f = open('test.txt') >>> for line in f.readlines(): ... print(line) ... My name is RockyI love Python 復制代碼

這個是不是讓你覺得和上面文件的 for 循環很類似?

>>> f = open('test.txt') >>> for line in f: ... print(line) ... My name is RockyI love Python 復制代碼

乍一看兩種方式好像沒有什么區別,其實這兩種方式是不同的。在 for line in f 中,并沒有將文件中所以的行都讀入內存,而 for line in f.readlines() 中先執行了 f.readlines(),在內存中有一個列表,列表中包含了所有文件的行,這就是兩種方式的區別。

大文件的讀取

上面的三個讀取文件內容的方法 read 和 readlines 都是一次性將全部的內容讀入內存,如果文件不是很大的話,這種做法能夠保證讀取的速度,但是如果文件內容很大,大到差不多內存那么大或者更大的時候,就不能這么做了。但是 Python 早就替你考慮到了,Python 中有一個 fileinput 模塊,可以使用它來操作。

>>> import fileinput >>> for line in fileinput.input('test.txt'): ... print(line,end = '') ... My name is Rocky I love Python 復制代碼

因為我沒有大的文件,只是為了演示一下這個模塊的用法,對于這個模塊更多的內容,可以在交互模式下用 dir() 去查看。

seek

不知道你有沒有奇怪過在之前的演示中,每次都要做 f = open(‘***’) 類似的操作,否則就會出現下面的情況:

>>> f = open('test.txt') >>> for line in f: ... print(line) ... My name is RockyI love Python >>> for line in f: ... print(line) ... >>> 復制代碼

是不是發現,當我們第二次循環文件的時候,既沒有報錯,也沒有顯示文件的內容,類似的現象在前面的 readline 中也出現過,這是因為讀取文件的時候,有指針隨著運動,當讀取結束時,指針就到了相應的位置。

當指針結束運動時,可以使用 tell() 告訴我們當前指針的位置。

>>> f = open('test.txt') >>> f.readline() 'My name is Rocky\n' >>> f.tell() 17 復制代碼

現在我們來看 seek() 的能力,它能夠根據偏移量來移動指針。

>>> f.seek(0) 0 復制代碼

上面的意思是將指針移動到文件的開始,如果用 f.readline() 讀取的話,現在輸出的應該是文件的第一行:

>>> f.readline() 'My name is Rocky\n’ 復制代碼

其實還可以操縱指針到任何一個位置,請看下面的操作:

>>> f.seek(10) 10 >>> f.tell() 10 復制代碼

f.seek(10) 就是將位置定位到從開頭算起到第 10 個字符后面,這時候如果使用 readline 的話,讀取的是從當前位置到行末的字母。

寫在之后

更多內容,歡迎關注公眾號「Python空間」,期待和你的交流。

總結

以上是生活随笔為你收集整理的零基础学习 Python 之文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。