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

ops/2025/1/22 9:34:42/

目录

Python 代码实现

Python 代码解释

1.导入必要的模块:

2.函数 get_file_info:

3.函数 print_file_info:

4.主函数 main:

5.程序入口:

使用方法


Python 代码实现

python">import os
import stat
import sys
import time
from pathlib import Pathdef get_file_info(file_path):try:file_info = {}path = Path(file_path)file_info['fname'] = str(path.resolve())file_info['fsize'] = path.stat().st_sizefile_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_infoexcept Exception as e:return {"error": f"Error: {e}"}def print_file_info(file_info):if "error" in file_info:print(file_info["error"])returnfile_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.导入必要的模块

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

2.函数 get_file_info

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

流程

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

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

  2. 获取基本信息

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

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

  3. 获取时间信息

    python">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. 获取行数和字符数

    python">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

    python">def print_file_info(file_info):...
    • 功能:格式化并打印文件信息。
    • 参数
      • file_info:包含文件信息的字典。
      • 流程
      • 检查是否有错误
        python">if "error" in file_info:print(file_info["error"])return
        
        如果存在错误信息,则打印错误并返回。
      • 定义并打印文件信息
        python">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}")
        
        使用预定义的键和值,打印文件的基本信息。
      • 判断是否为目录
        python">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

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

        5.程序入口

        python">if __name__ == "__main__":main()
        

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

        使用方法

        1.运行脚本

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

        2.输入文件或目录路径

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

        3.查看输出

        • 程序将输出文件或目录的详细信息,例如:
          python">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.
          
        • 如果输入的是目录,输出将类似于:
          python">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.错误处理

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

        http://www.ppmy.cn/ops/152164.html

        相关文章

        AI大模型开发—1、百度的千帆大模型调用(文心一言的底层模型,ENRIE等系列)、API文档目的地

        文章目录 前言一、千帆大模型平台简介二、百度平台官网初使用1、平台注册和使用2、应用注册 并 申请密钥3、开启千帆大模型 API调用a、API文档b、 前言 本章旨在为读者奉献一份实用的操作指南,深入探索如何高效利用百度千帆大模型平台的卓越功能。我们将从账号注册…

        Django多线程爬虫:突破数据抓取瓶颈

        Django框架以其高效、安全、可扩展性强等特点,在Web开发领域得到了广泛应用。同时,Python语言的多线程支持和丰富的库也为开发多线程爬虫提供了便利。将Django与多线程技术相结合,不仅可以利用Django的强大功能进行项目管理和数据存储&#x…

        强化学习入门--基本概念

        强化学习基本概念 grid-world example 这个指的是一个小机器人(agent)在一个网格区域(存在边界),网格中存在需要躲避的格子和目标格子,我们的目的就是找到到达目标格子的最短路径 state 表示智能体相对…

        Golang的图形编程应用案例分析与技术深入

        Golang的图形编程应用案例分析与技术深入 一、Golang在图形编程中的应用介绍 作为一种高效、简洁的编程语言,近年来在图形编程领域也逐渐展露头角。其并发性能优势和丰富的标准库使得它成为了一个越来越受欢迎的选择。 与传统的图形编程语言相比,Golang具…

        网络编程-UDP套接字

        文章目录 UDP/TCP协议简介两种协议的联系与区别Socket是什么 UDP的SocketAPIDatagramSocketDatagramPacket 使用UDP模拟通信服务器端客户端测试 完整测试代码 UDP/TCP协议简介 两种协议的联系与区别 TCP和UDP其实是传输层的两个协议的内容, 差别非常大, 对于我们的Java来说, …

        MDX语言的语法糖

        MDX语言的语法糖及其应用分析 引言 在当今数据驱动的时代,大数据分析和数据可视化已成为企业决策中不可或缺的一部分。MDX(Multidimensional Expressions,多维表达式)作为一门专为分析多维数据而设计的查询语言,广泛…

        MySQL下载安装配置(超级超级入门级)

        一、下载MySQL MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。 MySQL官网下载地址:https://dev.mysql.com/downloads/mysql/ 打开官网,现在最新是9.0版本,我们这里选择8.03版本…

        图论的起点——七桥问题

        普瑞格尔河从古堡哥尼斯堡市中心流过,河中有小岛两座,筑有7座古桥,哥尼斯堡人杰地灵,市民普遍爱好数学。1736年,该市一名市民向大数学家Euler提出如下的所谓“七桥问题”: 从家里出发,7座桥每桥…