最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python判斷一個目錄下哪些是文件哪些是文件夾的方法

 更新時間:2025年09月17日 08:41:45   作者:detayun  
本文介紹Python中識別目錄文件及文件夾的完整方案,支持跨平臺路徑處理、文件屬性分析(類型/大小/時間)、遞歸掃描、統(tǒng)計匯總,并提供彩色樹形輸出與錯誤處理功能,滿足多樣化需求,需要的朋友可以參考下

在Python中識別目錄下的文件和文件夾非常簡單,以下是完整解決方案:

import os
import sys
import argparse
from datetime import datetime

def list_directory_contents(directory_path, recursive=False, output_file=None):
    """
    高級目錄掃描工具
    - 支持遞歸掃描子目錄
    - 顯示詳細文件屬性
    - 可選輸出到文件
    - 自動處理路徑異常
    
    :param directory_path: 要掃描的目錄路徑
    :param recursive: 是否遞歸掃描子目錄
    :param output_file: 輸出結(jié)果的文件路徑
    """
    # 驗證并清理路徑
    directory_path = os.path.abspath(directory_path)
    
    # 自動創(chuàng)建不存在的目錄
    if not os.path.exists(directory_path):
        try:
            os.makedirs(directory_path)
            print(f"? 已創(chuàng)建目錄: {directory_path}")
        except OSError as e:
            print(f"? 無法創(chuàng)建目錄: {e}")
            return
    
    # 確保是目錄
    if not os.path.isdir(directory_path):
        print(f"? 錯誤: '{directory_path}' 不是一個目錄")
        return
    
    results = []
    
    def scan_directory(path, level=0):
        """遞歸掃描目錄"""
        try:
            with os.scandir(path) as entries:
                for entry in entries:
                    try:
                        # 獲取文件信息
                        stat = entry.stat()
                        size = stat.st_size
                        modified_time = stat.st_mtime
                        created_time = stat.st_ctime
                        
                        # 格式化時間
                        modified_str = datetime.fromtimestamp(modified_time).strftime('%Y-%m-%d %H:%M:%S')
                        created_str = datetime.fromtimestamp(created_time).strftime('%Y-%m-%d %H:%M:%S')
                        
                        # 判斷文件類型
                        if entry.is_file():
                            entry_type = '文件'
                        elif entry.is_dir():
                            entry_type = '文件夾'
                        elif entry.is_symlink():
                            entry_type = '符號鏈接'
                        else:
                            entry_type = '其他類型'
                            
                        # 收集信息
                        info = {
                            'name': entry.name,
                            'type': entry_type,
                            'size': size,
                            'modified': modified_str,
                            'created': created_str,
                            'path': os.path.abspath(entry.path),
                            'level': level
                        }
                        
                        results.append(info)
                        
                        # 遞歸掃描子目錄
                        if recursive and entry.is_dir():
                            scan_directory(entry.path, level + 1)
                    except OSError as e:
                        print(f"?? 無法訪問 '{entry.path}': {e}", file=sys.stderr)
        except PermissionError:
            print(f"?? 權(quán)限不足,無法掃描 '{path}'", file=sys.stderr)
        except OSError as e:
            print(f"?? 掃描 '{path}' 時發(fā)生錯誤: {e}", file=sys.stderr)
    
    # 開始掃描
    print(f"?? 掃描目錄: {directory_path}")
    scan_directory(directory_path)
    
    # 輸出結(jié)果
    if results:
        # 打印結(jié)果
        print("\n?? 目錄結(jié)構(gòu):")
        for info in results:
            # 創(chuàng)建縮進
            indent = ' ' * (info['level'] * 4)
            # 文件大小格式化
            size_str = format_size(info['size'])
            # 打印信息
            print(f"{indent}[{info['type']}] {info['name']} - {size_str} - 修改時間: {info['modified']}")
        
        # 統(tǒng)計信息
        file_count = sum(1 for r in results if r['type'] == '文件')
        dir_count = sum(1 for r in results if r['type'] == '文件夾')
        symlink_count = sum(1 for r in results if r['type'] == '符號鏈接')
        
        print(f"\n?? 統(tǒng)計信息:")
        print(f"  文件數(shù)量: {file_count}")
        print(f"  文件夾數(shù)量: {dir_count}")
        print(f"  符號鏈接數(shù)量: {symlink_count}")
        print(f"  總條目數(shù): {len(results)}")
        
        # 保存到文件
        if output_file:
            try:
                with open(output_file, 'w', encoding='utf-8') as f:
                    f.write("?? 目錄結(jié)構(gòu)報告\n")
                    f.write("="*50 + "\n\n")
                    f.write(f"掃描路徑: {directory_path}\n")
                    f.write(f"掃描時間: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
                    f.write(f"總條目數(shù): {len(results)}\n\n")
                    
                    # 寫入詳細信息
                    for info in results:
                        indent = ' ' * (info['level'] * 4)
                        size_str = format_size(info['size'])
                        f.write(f"{indent}[{info['type']}] {info['name']} - {size_str} - 修改時間: {info['modified']}\n")
                    
                    # 寫入統(tǒng)計信息
                    f.write("\n?? 統(tǒng)計信息:\n")
                    f.write(f"文件數(shù)量: {file_count}\n")
                    f.write(f"文件夾數(shù)量: {dir_count}\n")
                    f.write(f"符號鏈接數(shù)量: {symlink_count}\n")
                print(f"? 結(jié)果已保存到: {output_file}")
            except OSError as e:
                print(f"? 無法保存結(jié)果到文件: {e}")
    else:
        print("?? 目錄為空")

def format_size(size_bytes):
    """
    將字節(jié)大小轉(zhuǎn)換為更易讀的格式
    :param size_bytes: 文件大?。ㄗ止?jié))
    :return: 格式化后的字符串
    """
    if size_bytes == 0:
        return "0 B"
    
    units = ["B", "KB", "MB", "GB", "TB"]
    num = abs(size_bytes)
    unit = units[0]
    
    for u in units[1:]:
        if num < 1024.0:
            break
        num /= 1024.0
        unit = u
    
    return f"{num:.2f} {unit}"

def main():
    """主函數(shù),處理命令行參數(shù)"""
    # 創(chuàng)建命令行參數(shù)解析器
    parser = argparse.ArgumentParser(description='?? 高級目錄掃描工具')
    parser.add_argument('directory', nargs='?', default=os.getcwd(),
                        help='要掃描的目錄路徑(默認當前目錄)')
    parser.add_argument('-r', '--recursive', action='store_true',
                        help='遞歸掃描子目錄')
    parser.add_argument('-o', '--output',
                        help='輸出結(jié)果到指定文件')
    
    # 解析參數(shù)
    args = parser.parse_args()
    
    # 運行目錄掃描
    list_directory_contents(args.directory, args.recursive, args.output)

if __name__ == "__main__":
    main()

功能特點

智能路徑處理

  • 自動創(chuàng)建不存在的目錄
  • 規(guī)范路徑格式
  • 處理跨平臺路徑問題

詳細文件屬性

  • 文件類型識別(文件/文件夾/符號鏈接)
  • 文件大小(自動轉(zhuǎn)換單位)
  • 創(chuàng)建和修改時間
  • 完整路徑信息

高級功能

  • 遞歸掃描子目錄
  • 統(tǒng)計信息匯總
  • 結(jié)果輸出到文件
  • 錯誤處理和權(quán)限檢查

用戶友好輸出

  • 彩色符號標識
  • 樹形結(jié)構(gòu)展示
  • 格式化文件大小
  • 清晰的統(tǒng)計信息

使用方法

# 掃描當前目錄
python scanner.py

# 掃描指定目錄
python scanner.py /path/to/directory

# 遞歸掃描子目錄
python scanner.py /path/to/directory -r

# 遞歸掃描并保存結(jié)果到文件
python scanner.py /path/to/directory -r -o report.txt

輸出示例

?? 掃描目錄: /run_python/example_dir

?? 目錄結(jié)構(gòu):
[文件夾] images
[文件夾] documents
[文件] report.docx - 128.43 KB - 修改時間: 2023-10-05 14:30:00
[文件夾] archive
[文件] presentation.pptx - 2.10 MB - 修改時間: 2023-10-04 10:15:00

?? 統(tǒng)計信息:
  文件數(shù)量: 2
  文件夾數(shù)量: 3
  符號鏈接數(shù)量: 0
  總條目數(shù): 5

這個工具提供了專業(yè)的目錄掃描解決方案,能夠滿足各種文件和文件夾識別需求,同時具備強大的錯誤處理和用戶友好的輸出界面。

到此這篇關(guān)于Python判斷一個目錄下哪些是文件哪些是文件夾的方法的文章就介紹到這了,更多相關(guān)Python判斷文件和文件夾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python異步庫asyncio、aiohttp詳解

    Python異步庫asyncio、aiohttp詳解

    這篇文章主要介紹了Python異步庫asyncio、aiohttp使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python3實現(xiàn)倒計時效果

    python3實現(xiàn)倒計時效果

    這篇文章主要為大家詳細介紹了python3實現(xiàn)倒計時效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Pandas進階指南之數(shù)據(jù)合并與缺失值處理詳解

    Pandas進階指南之數(shù)據(jù)合并與缺失值處理詳解

    這篇文章主要為大家詳細介紹了使用Python的pandas庫進行Excel數(shù)據(jù)處理的進階技巧,主要包括數(shù)據(jù)清洗,多表合并與拼接,數(shù)據(jù)透?視表制作等辦公自動化核心功能,希望對大家有所幫助
    2026-04-04
  • 用Python進行數(shù)據(jù)清洗以及值處理

    用Python進行數(shù)據(jù)清洗以及值處理

    這篇文章主要介紹了用Python進行數(shù)據(jù)清洗以及值處理,數(shù)據(jù)分析中,數(shù)據(jù)清洗是一個必備階段。數(shù)據(jù)分析所使用的數(shù)據(jù)一般都很龐大,致使數(shù)據(jù)不可避免的出現(xiàn)重復、缺失、異常值等異常數(shù)據(jù),如果忽視這些異常數(shù)據(jù),可能導致分析結(jié)果的準確性,需要的朋友可以參考下
    2023-07-07
  • Python中sorted()排序與字母大小寫的問題

    Python中sorted()排序與字母大小寫的問題

    這篇文章主要介紹了Python中sorted()排序與字母大小寫的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • python實現(xiàn)跨年煙花動態(tài)效果

    python實現(xiàn)跨年煙花動態(tài)效果

    這篇文章主要介紹了python實現(xiàn)跨年煙花的動態(tài)效果,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • 簡述Python中的進程、線程、協(xié)程

    簡述Python中的進程、線程、協(xié)程

    這篇文章主要介紹了Python中的進程、線程、協(xié)程的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • python中的字符串切割 maxsplit

    python中的字符串切割 maxsplit

    這篇文章主要介紹了python中的字符串切割 maxsplit,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 最新評論

    偃师市| 连州市| 深州市| 宁远县| 阳朔县| 八宿县| 横峰县| 双桥区| 工布江达县| 曲麻莱县| 金阳县| 抚宁县| 易门县| 乌鲁木齐县| 巴林右旗| 运城市| 邵武市| 海兴县| 炎陵县| 天气| 大庆市| 新昌县| 成武县| 梁河县| 积石山| 孝感市| 海林市| 肥城市| 安福县| 清镇市| 从江县| 祁东县| 长阳| 湟中县| 凤凰县| 英超| 田林县| 广宗县| 西乡县| 千阳县| 翼城县|