[英]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.