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

來源:互聯網
上載者:User
本人剛接觸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'的檔案中去

回複內容:

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

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

這個實現還是有坑。如果檔案一直在增長,那麼『最後兩行』應該是程式執行當時檔案的最後兩行,步驟3裡應該是『從倒數第二個斷行符號符輸出到步驟1中擷取的檔案大小位置』

1. 使用os.walk遍曆所有的檔案。
2. 使用os.path.splitext擷取每個檔案的副檔名。篩選出副檔名是txt的檔案。
3. 將上一步的結果組成一個list,按照時間排序。
4. 取出list的後2個元素。
5. 寫入list.txt。給你來個 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. 你已經知道怎麼遍曆檔案了,但是尾碼名為 '.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() 方法,以第二個元素排序即可。
可以用deque

def tail(filename, n=10):    'Return the last n lines of a file'    return deque(open(filename), n)
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.