繁体   English   中英

如何返回 Python 路径中特定文件类型的修改日期?

[英]How to return the modified date for specific file types within a path in Python?

我有一个文件路径,我需要返回其中的文件名列表 + Python 中每个文件的最后修改日期。我能够做到这一点,除了问题是我只想对 PDF 执行此操作并且有多个我正在使用的文件夹中的文件类型。 我已经到了可以获取文件名和修改日期的地步,但是当我尝试输入 PDF 唯一规定时遇到错误。

以下是我到目前为止所拥有的:

path = <insert path>

def ts_to_dt(ts):
    return datetime.datetime.fromtimestamp(ts)

for file in os.scandir(path):
    #if file.endswith(".pdf"):
     print(file.name, ts_to_dt(file.stat().st_atime))

当我尝试使用被注释掉的行执行时(if file.endswith(".pdf")),我得到这个错误:

if file.endswith(".pdf"):
   ^^^^^^^^^^^^^
AttributeError: 'nt.DirEntry' object has no attribute 'endswith'

我是 Python 的新手,所以我们将不胜感激!

我建议为此使用pathlib

你可以这样做:

from pathlib import Path

def print_access_times(path):
    path = Path(path)  # If path was either a str or Path object, this will work
    for file in path.iterdir():
        if file.suffix == '.pdf':
            print(file.name, ts_to_dt(file.stat().st_atime))

您的代码的问题是os.scandir产生DirEntry对象(没有endswith方法),而不是字符串。 pathlib 中的Path对象为pathlib中的路径提供了一个更一致的接口。

您可以将file.name.endswith('.pdf')os.scandir解决方案一起使用。

要将路径 object 转换回字符串,您可以使用file.as_posix()str(file)

如果您事先不确定给定路径是否为目录,则可以使用以下内容来优雅地处理可能引发的错误:

def print_access_times(path):
    path = Path(path)  # If path was either a str or Path object, this will work
    try:
        for file in path.iterdir():
            if file.suffix == '.pdf':
                print(file.name, ts_to_dt(file.stat().st_atime))
    except NotADirectoryError:
        pass

os.scandir返回一个os.DirEntry对象的迭代器,正如您从错误消息中看到的那样。

os.DirEntry具有您可以获得的不同属性,包括一个name属性,它是一个字符串。

所以你可以这样做:

if file.name.endswith(".pdf"):
   ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM