如何利用python讀取特定目錄下的特定文件的倒數兩行?

本人剛接觸python,在書上看到一個習題,問題如下:

1、列出指定目錄」c:」所有的後綴名為*.txt 的文件(包括子文件夾內所有文件),並輸出每個文件的創建日期和大小

2、針對上述文件,取內容倒數 2 行,存入新文件,取名「list.txt」

3、將上述文件按照創建時間進行正向排序(從小到大),存入新文件,取名「排序.txt」

我嘗試做了一下,但是有幾個地方總是做到一半就沒思路了,求助各位!

import os
for parent,dirnames,filenames in os.walk("C:"): #遍歷C:下的文件
for filename in filenames: #循環文件列表
if ".txt" in filename: #找出所以後綴是.txt的文件
myfile = open(os.path.join(parent,filename)) #得到該文件的絕對路徑並打開文件
for line in myfile.readlines(): #讀取文件每一行,並循環
open("./list.txt","a").write(line) #將該行寫入指定名稱為"list.txt"的文件中去

本來想用output = os.popen("dir /OD /S *.txt") 但是這個的結果是每個目錄下的文件按時間排序,不是整體按時間排序


讀取最後2行,別信那些用readlines()的答案。那些答案,丟給你個16GB的文件就死翹翹了。老老實實用tail命令的實現方法:

  1. 用os.seek跳轉到文件末尾,os.tell判斷文件大小
  2. 設置個合適的buf size,假設是1024。循環從文件末尾os.seek往回跳buf size,判斷讀取的內容里回車符的數量,累加回車符數量
  3. 當回車符數量大於等於2的時候,停止循環。確定倒數第二個回車符的位置,os.seek到那個位置,輸出到文件末尾

這個實現還是有坑。如果文件一直在增長,那麼『最後兩行』應該是程序執行當時文件的最後兩行,步驟3里應該是『從倒數第二個回車符輸出到步驟1中獲取的文件大小位置』


謝邀。

別想太多,一步一步慢慢來。

  1. 你已經知道怎麼遍歷文件了,但是後綴名為 ".txt" 不應該用 in 來判斷,而要用 filename.endswith(".txt") 或 filename[-4:] == ".txt"。

    在 Windows 平台上,文件的創建時間可以用 os.path.getctime() 來獲取。os.path.getsize() 則能獲得文件大小。
  2. 要獲取文件內容的最後兩行,myfile.readlines() 會返回一個 list,所以 myfile.readlines()[-2:] 就是最後兩行了。

    如果文件比較大的話,讀取完整的文件肯定是不高效的。這時可以用 seek() 方法讀後面的內容。
  3. 根據第 1 步得到的信息可以生成 [(path0, time0), (path1, time1), ...] 的 list。

    然後調用它的 sort() 方法,以第二個元素排序即可。

給你來個 shell 版的,

ls -1tr `find . -name "*.txt" -type f -print` | tee 排序.txt.xx | xargs -I FNAME tail -n 2 FNAME &>&> list.txt.xx mv list.txt.xx list.txt mv 排序.txt.xx 排序.txt

擦,回頭一看發現是 windows,,,


1. 使用os.walk遍歷所有的文件。

2. 使用os.path.splitext獲取每個文件的擴展名。篩選出擴展名是txt的文件。

3. 將上一步的結果組成一個list,按照時間排序。

4. 取出list的後2個元素。

5. 寫入list.txt。


可以用deque

def tail(filename, n=10):
"Return the last n lines of a file"
return deque(open(filename), n)


利用文件指針和readlines 實現倒數行數讀取,操作大文件不必擔心全文載入。python實現文件倒數行數讀取 - CSDN博客


如果是取其中兩列用啥方法?


推薦閱讀:

能不能寫出一個程序,通過自身的遞歸迭代,自己就產生了智能呢?
有哪些動漫作品是與編程有關的?
爬取中國亞馬遜網站遇到503怎麼解決?
在 Mac 上運行 Windows 程序的最佳方法是什麼?
一個Windows應用程序,例如大型遊戲,除了exe文件外,其餘的文件都是些什麼文件?有什麼內容?

TAG:編程語言 | Python | 程序 | Python入門 |