获取有关目录中文件的信息并在表格中打印

Posted

技术标签:

【中文标题】获取有关目录中文件的信息并在表格中打印【英文标题】:Get information about files in a directory and print in a table 【发布时间】:2020-03-30 12:36:46 【问题描述】:

我被困住了。我想获取用户指定的 Windows 目录,并在表中列出该目录中的每个文件,包括路径、文件名、文件大小、上次修改时间和 MD5 哈希。对于我的一生,我无法弄清楚如何将其分解为单个文件;它只做整个路径。我知道路径变量需要转入目录中的各种文件,但我不知道该怎么做。

如何相应地创建表,并添加 MD5 哈希列。最后修改时间应该是人类可读的格式,而不是 UNIX 时间戳

#import libraries
import os
import time
import datetime
import logging
import hashlib
from prettytable import PrettyTable
import glob

#user input
path = input ("Please enter directory: ")
verbose = input ("Please enter yes/no for verbose: ")
print ("===============================================")

#processing input
if os.path.exists(path):
    print("Processing directory: ", (path))
else:
    print("Invalid directory.")
    exit()

if (verbose) == ("yes"):
    print("Verbose selected")
elif (verbose) == ("no"):
    print("Verbose not selected")
else:
    print("Invalid input")
print ("===============================================")

#process directory
directory = glob.glob(path)
filename = os.path.basename(path)
size = os.path.getsize(path)
modified = os.path.getmtime(path)

#output in to table
report = PrettyTable()

column_names = ['Path', 'File Name', 'File Size', 'Last Modified Time', 'MD5 Hash']
report.add_column(column_names[0], [directory])
report.add_column(column_names[1], [filename])
report.add_column(column_names[2], [size])   
report.add_column(column_names[3], [modified])
report.sortby = 'File Size'

print (report)

【问题讨论】:

【参考方案1】:

此解决方案是否符合您的要求?使用内置的pathlib:

from pathlib import Path
from datetime import datetime
import hashlib

#...Your code getting path here...

directory = Path(path)
paths = []
filename = []
size = []
hashes = []
modified = []
files = list(directory.glob('**/*.*'))

for file in files:
    paths.append(file.parents[0])
    filename.append(file.parts[-1])
    size.append(file.stat().st_size)
    modified.append(datetime.fromtimestamp(file.stat().st_mtime))
    with open(file) as f:        
        hashes.append(hashlib.md5(f.read().encode()).hexdigest())

#output in to table
report = PrettyTable()

column_names = ['Path', 'File Name', 'File Size', 'Last Modified Time', 'MD5 Hash']
report.add_column(column_names[0], paths)
report.add_column(column_names[1], filename)
report.add_column(column_names[2], size)   
report.add_column(column_names[3], modified)
report.add_column(column_names[4], hashes)
report.sortby = 'File Size'

print(report)

输出:

+-------------------+------------------+-----------+----------------------------+----------------------------------+
|        Path       |    File Name     | File Size |     Last Modified Time     |             MD5 Hash             |
+-------------------+------------------+-----------+----------------------------+----------------------------------+
| C:\...\New folder | 1 - Copy (2).txt |     0     | 2019-12-05 15:35:31.562420 | d41d8cd98f00b204e9800998ecf8427e |
| C:\...\New folder | 1 - Copy (3).txt |     0     | 2019-12-05 15:35:31.562420 | d41d8cd98f00b204e9800998ecf8427e |
| C:\...\New folder |   1 - Copy.txt   |     0     | 2019-12-05 15:35:31.562420 | d41d8cd98f00b204e9800998ecf8427e |
| C:\...\New folder |      1.txt       |     0     | 2019-12-05 15:35:31.562420 | d41d8cd98f00b204e9800998ecf8427e |
+-------------------+------------------+-----------+----------------------------+----------------------------------+

【讨论】:

是的!谢谢你。所以我的调整需要将文件时间从纪元转换为标准的 MM/DD/YYYY TT:TT:TT,并添加 MD5 哈希。由于我没有要处理的直接变量,因此最简单的方法是什么。 是的,我确实错过了被删除的括号;抱歉,我太急于开始了。 我收到一个 NameError,因为哈希没有被定义。 啊,我忘了在开头添加hashes=[]。我会更新我的答案。 它会打开另一个文件 cp1252.py,并抛出“builtins.UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 118: character maps to ”错误。跨度>

以上是关于获取有关目录中文件的信息并在表格中打印的主要内容,如果未能解决你的问题,请参考以下文章

从文本文件中获取数据并在 html 表格中显示

React - 在表格行上触发点击事件并在另一个页面中显示所选行的详细信息

从 $table 中提取 outerHTML 变量

如何在同一GET请求中呈现文件并将数据发送到页面

如何将有关从通道获取的消息的信息放入 JSON 文件?

如何解析 JSON 对象并在表格中显示? [关闭]