《Python Cookbook 3rd》笔记(5.13):读写压缩文件
生活随笔
收集整理的這篇文章主要介紹了
《Python Cookbook 3rd》笔记(5.13):读写压缩文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
獲取文件夾中的文件列表
問題
你想獲取文件系統中某個目錄下的所有文件列表。
解法
使用 os.listdir() 函數來獲取某個目錄中的文件列表:
import os names = os.listdir('somedir')結果會返回目錄中所有文件列表,包括所有文件,子目錄,符號鏈接等等。如果你需要通過某種方式過濾數據,可以考慮結合 os.path 庫中的一些函數來使用列表推導。比如:
import os.path# Get all regular files names = [name for name in os.listdir('somedir') if os.path.isfile(os.path.join('somedir', name))]# Get all dirs dirnames = [name for name in os.listdir('somedir') if os.path.isdir(os.path.join('somedir', name))]字符串的 startswith() 和 endswith() 方法對于過濾一個目錄的內容也是很有用的。比如:
pyfiles = [name for name in os.listdir('somedir') if name.endswith('.py')]對于文件名的匹配,你可能會考慮使用 glob 或 fnmatch 模塊。比如:
import glob pyfiles = glob.glob('somedir/*.py')from fnmatch import fnmatch pyfiles = [name for name in os.listdir('somedir') if fnmatch(name, '*.py')]討論
獲取目錄中的列表是很容易的,但是其返回結果只是目錄中實體名列表而已。如果你還想獲取其他的元信息,比如文件大小,修改時間等等,你或許還需要使用到os.path 模塊中的函數或著 os.stat() 函數來收集數據。比如:
# Example of getting a directory listingimport os import os.path import globpyfiles = glob.glob('*.py')# Get file sizes and modification dates name_sz_date = [(name, os.path.getsize(name), os.path.getmtime(name))for name in pyfiles]for name, size, mtime in name_sz_date:print(name, size, mtime)# Alternative: Get file metadata file_metadata = [(name, os.stat(name)) for name in pyfiles] for name, meta in file_metadata:print(name, meta.st_size, meta.st_mtime)最后還有一點要注意的就是,有時候在處理文件名編碼問題時候可能會出現一些問題。通常來講,函數 os.listdir() 返回的實體列表會根據系統默認的文件名編碼來解碼。但是有時候也會碰到一些不能正常解碼的文件名。關于文件名的處理問題,在5.14 和 5.15 小節有更詳細的講解。
總結
以上是生活随笔為你收集整理的《Python Cookbook 3rd》笔记(5.13):读写压缩文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习问题总结(01)
- 下一篇: Python外(1)--try-expe