Python 获取目录中每个文件的最后一次修改

Python 获取目录中每个文件的最后一次修改,python,Python,我试图获取特定目录中每个文件的数据。现在我只是想知道最后修改的日期。似乎我需要将此WindowsPath转换为字符串,但我找不到任何函数可以这样做 import os import time from pathlib import Path startDir = os.getcwd() pt = r"\\folder1\folder2" asm_pths = [pth for pth in Path(pt).iterdir() if pth.suffix == '.

我试图获取特定目录中每个文件的数据。现在我只是想知道最后修改的日期。似乎我需要将此WindowsPath转换为字符串,但我找不到任何函数可以这样做

import os
import time
from pathlib import Path

startDir = os.getcwd()

pt = r"\\folder1\folder2"

asm_pths = [pth for pth in Path(pt).iterdir()
            if pth.suffix == '.xml']


for file in asm_pths:
    (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
    print("last modified: %s" % time.ctime(mtime))
控制台:

Traceback (most recent call last):
  File "C:\Users\daniel.bak\My Documents\LiClipse Workspace\Crystal Report Batch Analyzer\Analyzer\analyzer.py", line 34, in <module>
    (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
TypeError: argument should be string, bytes or integer, not WindowsPath
回溯(最近一次呼叫最后一次):
文件“C:\Users\daniel.bak\My Documents\LiClipse Workspace\Crystal Report Batch Analyzer\Analyzer\Analyzer.py”,第34行,在
(模式、ino、dev、nlink、uid、gid、大小、atime、mtime、ctime)=os.stat(文件)
TypeError:参数应为字符串、字节或整数,而不是WindowsPath
应该给你一个答案。您的问题是
文件
类型应该是字符串。将代码更改为类似以下内容:

# a list of string
paths = [f for f in os.listdir(".") if f.endswith(".xml")]
for f in paths:
    print("last modified: %s" % time.ctime(os.path.getmtime(f)))

path
参数必须是字符串,但您正在传递的是的实例。您需要使用
str
Path
转换为字符串

for file in asm_pths:
    (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(str(file))
    print("last modified: %s" % time.ctime(mtime))
但如果您只想要最后修改日期,则可以:

for file in asm_pths:
    print("last modified: %s" % time.ctime(os.path.getmtime(str(file)))

您还可以对
WindowsPath
(pathlib.Path)对象使用
lstat().st_mtime

例子:
从pathlib导入路径
file=Path(r'C:\Users\\Desktop\file.txt')
file.lstat().st_mtime
输出:1496134873.8279443
导入日期时间
datetime.datetime.fromtimestamp(文件.lstat().st_mtime)
输出:datetime.datetime(2017,5,30,12,1,13827944)

无需使用
os.stat
函数,pathlib具有相同的函数-
file.stat()
其中file是您的路径对象。
您可以使用以下代码:

asm中的文件的
:
(mode、ino、dev、nlink、uid、gid、size、atime、mtime、ctime)=file.stat()
打印(f'last modified:{time.ctime(mtime)}')
但如果您只想要最后修改日期,请使用以下命令:

asm中的文件的
:
打印(f'last modified:{time.ctime(file.stat().st_mtime}'))

我希望尽可能避免在同一个项目中使用os.path和pathlib.path,以防止混淆和错误,因为pathlib的路径由path对象组成,os.path需要字符串作为路径。

不需要os.stat,pathlib具有相同的功能,可以在path对象和字符串之间切换令人困惑的是,当pathlib发展成一个getmtime等价物时,我会很高兴地切换。如果它返回了一个正确的UTC日期时间实例,那将是一个额外的奖励。(但这不太可能,核心开发者似乎讨厌时区…让我想起了str/unicode混乱)
from pathlib import Path

file = Path(r'C:\Users\<user>\Desktop\file.txt')
file.lstat().st_mtime

Output: 1496134873.8279443

import datetime
datetime.datetime.fromtimestamp(file.lstat().st_mtime)

Output: datetime.datetime(2017, 5, 30, 12, 1, 13, 827944)