Python 脚本-显示给定文件的文件信息
目录
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
:要获取信息的文件或目录的路径。
流程:
- 创建Path对象:
path = Path(file_path)
使用
pathlib.Path
处理文件路径,确保路径的正确性和可操作性。 -
获取基本信息:
file_info['fname'] = str(path.resolve()) file_info['fsize'] = path.stat().st_size
resolve()
:获取文件的绝对路径。st_size
:获取文件大小(以字节为单位)。 -
获取时间信息:
file_info['f_lm'] = time.strftime( "%d/%m/%Y %I:%M:%S %p", time.localtime(path.stat().st_mtime) ) ...
使用
time.strftime
和time.localtime
将时间戳格式化为可读的日期和时间格式。st_mtime
:最后修改时间。st_atime
:最后访问时间。st_ctime
:创建时间(在Windows上)或最后状态时间(在Unix/Linux上)。 -
获取行数和字符数:
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)!