自学内容网 自学内容网

Python 脚本-显示给定文件的文件信息

目录

Python 代码实现

Python 代码解释

1.导入必要的模块:

2.函数 get_file_info:

3.函数 print_file_info:

4.主函数 main:

5.程序入口:

使用方法


Python 代码实现

import os
import stat
import sys
import time
from pathlib import Path

def get_file_info(file_path):
    try:
        file_info = {}
        path = Path(file_path)
        file_info['fname'] = str(path.resolve())
        file_info['fsize'] = path.stat().st_size
        file_info['f_lm'] = time.strftime(
            "%d/%m/%Y %I:%M:%S %p", time.localtime(path.stat().st_mtime)
        )
        file_info['f_la'] = time.strftime(
            "%d/%m/%Y %I:%M:%S %p", time.localtime(path.stat().st_atime)
        )
        file_info['f_ct'] = time.strftime(
            "%d/%m/%Y %I:%M:%S %p", time.localtime(path.stat().st_ctime)
        )
        if path.is_file():
            with path.open('r') as f:
                lines = f.readlines()
                file_info['no_of_lines'] = len(lines)
                file_info['t_char'] = sum(len(line) for line in lines)
        elif path.is_dir():
            file_info['no_of_lines'] = "N/A (Directory)"
            file_info['t_char'] = "N/A (Directory)"
        else:
            file_info['no_of_lines'] = "N/A (Not a regular file)"
            file_info['t_char'] = "N/A (Not a regular file)"
        return file_info
    except Exception as e:
        return {"error": f"Error: {e}"}

def print_file_info(file_info):
    if "error" in file_info:
        print(file_info["error"])
        return
    file_info_keys = (
        "File Name",
        "File Size",
        "Last Modified",
        "Last Accessed",
        "Creation Time",
        "Total Number of Lines",
        "Total Number of Characters",
    )
    file_info_values = (
        file_info['fname'],
        f"{file_info['fsize']} bytes",
        file_info['f_lm'],
        file_info['f_la'],
        file_info['f_ct'],
        file_info['no_of_lines'],
        file_info['t_char'],
    )
    for key, value in zip(file_info_keys, file_info_values):
        print(f"{key} = {value}")
    if stat.S_ISDIR(os.stat(file_info['fname']).st_mode):
        print("This is a directory.")
    else:
        print("This is not a directory.")

def main():
    file_name = input("Enter a file name: ")
    file_info = get_file_info(file_name)
    print_file_info(file_info)

if __name__ == "__main__":
    main()

Python 代码解释

1.导入必要的模块

import os
import stat
import sys
import time
from pathlib import Path
  • os 和 stat:用于与操作系统交互,获取文件状态信息。
  • sys:用于处理系统级别的操作,如退出程序。
  • time:用于处理和格式化日期和时间。
  • pathlib.Path:提供面向对象的文件系统路径操作,简化路径处理。

2.函数 get_file_info

def get_file_info(file_path):
    ...
  • 功能:获取指定文件或目录的详细信息。
  • 参数
    • file_path:要获取信息的文件或目录的路径。

流程

  1. 创建Path对象
    path = Path(file_path)

    使用pathlib.Path处理文件路径,确保路径的正确性和可操作性。

  2. 获取基本信息

    file_info['fname'] = str(path.resolve())
    file_info['fsize'] = path.stat().st_size

    resolve():获取文件的绝对路径。st_size:获取文件大小(以字节为单位)。

  3. 获取时间信息

    file_info['f_lm'] = time.strftime(
        "%d/%m/%Y %I:%M:%S %p", time.localtime(path.stat().st_mtime)
    )
    ...

    使用time.strftimetime.localtime将时间戳格式化为可读的日期和时间格式。st_mtime:最后修改时间。                                                                                        st_atime:最后访问时间。                                                                                    st_ctime:创建时间(在Windows上)或最后状态时间(在Unix/Linux上)。

  4. 获取行数和字符数

    if path.is_file():
        with path.open('r') as f:
            lines = f.readlines()
            file_info['no_of_lines'] = len(lines)
            file_info['t_char'] = sum(len(line) for line in lines)
    ...

    文件:如果路径指向一个文件,则读取所有行,计算总行数和总字符数。                            目录:如果路径指向一个目录,则设置行数和字符数为“N/A”。                                            

    3.函数 print_file_info

    def print_file_info(file_info):
        ...
    • 功能:格式化并打印文件信息。
    • 参数
      • file_info:包含文件信息的字典。
      • 流程
      • 检查是否有错误
        if "error" in file_info:
            print(file_info["error"])
            return
        
        如果存在错误信息,则打印错误并返回。
      • 定义并打印文件信息
        file_info_keys = (
            "File Name",
            "File Size",
            "Last Modified",
            "Last Accessed",
            "Creation Time",
            "Total Number of Lines",
            "Total Number of Characters",
        )
        file_info_values = (
            file_info['fname'],
            f"{file_info['fsize']} bytes",
            file_info['f_lm'],
            file_info['f_la'],
            file_info['f_ct'],
            file_info['no_of_lines'],
            file_info['t_char'],
        )
        for key, value in zip(file_info_keys, file_info_values):
            print(f"{key} = {value}")
        
        使用预定义的键和值,打印文件的基本信息。
      • 判断是否为目录
        if stat.S_ISDIR(os.stat(file_info['fname']).st_mode):
            print("This is a directory.")
        else:
            print("This is not a directory.")
        
        使用stat模块判断文件是否为目录,并打印相应的信息。

      4.主函数 main

      def main():
          file_name = input("Enter a file name: ")
          file_info = get_file_info(file_name)
          print_file_info(file_info)
      
      • 功能:作为程序的入口,获取用户输入并调用相应的函数处理。
      • 流程
      • 获取用户输入
        file_name = input("Enter a file name: ")
        
        提示用户输入要查询的文件或目录的路径。
      • 获取文件信息
        file_info = get_file_info(file_name)
        
        调用get_file_info函数获取文件信息。
      • 打印文件信息
        print_file_info(file_info)
        
        调用print_file_info函数打印文件信息。

        5.程序入口

        if __name__ == "__main__":
            main()
        

        确保脚本作为主程序运行时,执行main函数。

        使用方法

        1.运行脚本

        • 确保您的环境中已安装Python(建议使用Python 3)。
        • 将上述代码保存为一个Python文件,例如fileinfo.py
        • 打开终端或命令提示符,导航到脚本所在的目录。
        • 运行脚本:
          python fileinfo.py
          

        2.输入文件或目录路径

        • 程序会提示:
          Enter a file name:
          
        • 输入您想要查询的文件或目录的完整路径。例如:
          Enter a file name: /home/user/Documents/example.txt
          
          或者:
          Enter a file name: /home/user/Documents/
          

        3.查看输出

        • 程序将输出文件或目录的详细信息,例如:
          File Name = /home/user/Documents/example.txt
          File Size = 2048 bytes
          Last Modified = 15/01/2025 10:30:45 PM
          Last Accessed = 20/01/2025 09:15:30 AM
          Creation Time = 10/01/2025 08:20:10 AM
          Total Number of Lines = 100
          Total Number of Characters = 5000
          This is not a directory.
          
        • 如果输入的是目录,输出将类似于:
          File Name = /home/user/Documents/
          File Size = 4096 bytes
          Last Modified = 20/01/2025 09:00:00 AM
          Last Accessed = 20/01/2025 09:00:00 AM
          Creation Time = 10/01/2025 08:00:00 AM
          Total Number of Lines = N/A (Directory)
          Total Number of Characters = N/A (Directory)
          This is a directory.
          

        4.错误处理

        • 如果用户输入的文件或目录不存在或没有访问权限,程序将输出错误信息。例如:
          Error: [Errno 2] No such file or directory: '/home/user/Documents/nonexistent.txt'
          
        • 如果用户输入的是符号链接或其他非常规文件,程序将相应地处理并输出信息。

        原文地址:https://blog.csdn.net/xinfanyyds/article/details/145289730

        免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!