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'
          
        • 如果用户输入的是符号链接或其他非常规文件,程序将相应地处理并输出信息。

        本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/957363.html

        如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

        相关文章

        SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用

        SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用 文章目录 SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用一. 使用SpringBoot自带的定时任务(适用于小型应用)二. 使用调度框架…

        蓝桥与力扣刷题(73 矩阵置零)

        题目:给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2&…

        源码分析之Openlayers中样式篇Text类

        访问Openlayers网站(https://jinuss.github.io/Openlayers_map_pages/,网站是基于Vue3 Openlayers,里面有大量的实践和案例。觉得还不错,可以 给个小星星Star,鼓励一波 https://github.com/Jinuss/OpenlayersMap哦~ 概述 Text 类…

        uniapp开发 swiper 上下滚动

        一、效果图 二、代码: 在uni-app中使用swiper组件实现上下滚动(垂直滚动)的功能可以通过设置vertical属性来实现。swiper组件默认是水平滚动的,通过将vertical属性设置为true,可以改变滚动方向为垂直。 <template><view><swiper

        OSI5GWIFI自组网协议层次对比

        目录 5G网络5G与其他协议栈各层映射 5G网络 物理层 (PHY) 是 5G 基站协议架构的最底层&#xff0c;负责将数字数据转换为适合无线传输的信号&#xff0c;并将接收到的无线信号转换为数字数据。实现数据的编码、调制、多天线处理、资源映射等操作。涉及使用新的频段&#xff08…

        VSCode最新离线插件拓展下载方式

        之前在vscode商店有以下类似的download按钮&#xff0c;但是2025年更新之后这个按钮就不提供了&#xff0c;所以需要使用新的方式下载 ps:给自己的网站推广下~~&#xff08;国内直连GPT/Claude&#xff09; 新的下载方式1 首先打开vscode商店官网&#xff1a;vscode插件下载…

        Maven多环境打包方法配置

        简单记录一下SpringBoot多环境打包配置方法&#xff0c;分部署环境和是否包含lib依赖包两个维度 目录 一、需求说明二、目录结构三、配置方案四、验证示例 一、需求说明 基于Spring Boot框架的项目分开发&#xff0c;测试&#xff0c;生产等编译部署环境&#xff08;每一个环境…

        异或和之和

        题目&#xff1a; 0异或和之和 - 蓝桥云课 异或和之和 题目描述 给定一个数组 Ai​&#xff0c;分别求其每个子段的异或和&#xff0c;并求出它们的和。或者说&#xff0c;对于每组满足 1≤L≤R≤n 的 L,R&#xff0c;求出数组中第 L 至第 R 个元素的异或和。然后输出每组 …

        [OpenGL]实现屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO)

        一、简介 本文介绍了 屏幕空间环境光遮蔽(Screen-Space Ambient Occlusion, SSAO) 的基本概念&#xff0c;实现流程和简单的代码实现。实现 SSAO 时使用到了 OpenGL 中的延迟着色 &#xff08;Deferred shading&#xff09;技术。 按照本文代码实现后&#xff0c;可以实现以下…

        c++ 与 Matlab 程序的数据比对

        文章目录 背景环境数据保存数据加载 背景 ***避免数据精度误差&#xff0c;快速对比变量 *** 环境 c下载 https://github.com/BlueBrain/HighFive 以及hdf5库 在vs 中配置库 数据保存 #include <highfive/highfive.hpp> using namespace HighFive;std::string fil…

        Java基础——概念和常识(语言特点、JVM、JDK、JRE、AOT/JIT等介绍)

        我是一个计算机专业研0的学生卡蒙Camel&#x1f42b;&#x1f42b;&#x1f42b;&#xff08;刚保研&#xff09; 记录每天学习过程&#xff08;主要学习Java、python、人工智能&#xff09;&#xff0c;总结知识点&#xff08;内容来自&#xff1a;自我总结网上借鉴&#xff0…

        Java设计模式:创建型模式→建造者模式

        Java 建造者模式详解 1. 定义 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;允许使用多个简单的对象一步步构建一个复杂的对象。该模式使用一个建造者对象来构造一个最终的对象&#xff0c;提供清晰的分步构建流程&#xff0c;从而使得…

        从CRUD到高级功能:EF Core在.NET Core中全面应用(三)

        目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合&#xff0c;它继承自IEnumerable但具有一些关键的区别&#xff0c;使得它在处理数据库查询时非常有用&#xff0c;普通集…

        C语言之小型成绩管理系统

        &#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 C语言之小型成绩管理系统 目录 设计题目设计目的设计任务描述设计要求输入和输出要求验收要…

        Linux中DataX使用第一期

        简介 DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databen…

        Windows配置frp内网穿透实现远程连接

        仅个人记录 本文仅介绍客户端的配置 1. 开始 frp分为服务端和客户端&#xff0c;为实现内网穿透需要同时配置服务端和客户端&#xff0c;并且版本保持一致&#xff0c;可以前往 frp github下载 本文使用 0.51.2 版本&#xff0c;从GitHub下载并解压&#xff0c;得到如下文件…

        PHP同城配送小程序

        &#x1f680; 同城极速达——您生活中的极速配送大师 &#x1f4f1; 一款专为现代都市快节奏生活量身打造的同城配送小程序&#xff0c;同城极速达&#xff0c;集高效、便捷、智能于一身&#xff0c;依托ThinkPHPGatewayWorkerUniapp的强大架构&#xff0c;巧妙融合用户端、骑…

        ESP32云开发二( http + led + lcd)

        文章目录 前言先上效果图platformio.iniwokwi.tomldiagram.json源代码编译编译成功上传云端完结撒花⭐⭐⭐⭐⭐ 前言 阅读此篇前建议先看 此片熟悉下wokwi https://blog.csdn.net/qq_20330595/article/details/144289986 先上效果图 Column 1Column 2 platformio.ini wokwi…

        分布式搜索引擎02

        1. DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1. DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c…

        reactor框架使用时,数据流请求流程

        1. 我们在Flux打开时&#xff0c;可以看到 public abstract class Flux<T> implements CorePublisher<T> { 2. public interface CorePublisher<T> extends Publisher<T> {void subscribe(CoreSubscriber<? super T> subscriber); } Publish…