对目录中的每个文件进行最后修改

时间:2016-04-12 12:39:46

标签: 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 == '.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

4 个答案:

答案 0 :(得分:2)

os.path.getmtime(file)应该给你anwser。您的问题是file类型应该是一个字符串。将您的代码更改为:

# 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)))

答案 1 :(得分:1)

os.statpath参数必须是字符串,但您传递的是Path的实例。您需要使用Pathstr转换为字符串。

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))

但如果您只想要上次修改日期,那么os.path.getmtime就可以了:

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

答案 2 :(得分:0)

您也可以将lstat().st_mtime用于WindowsPath(pathlib.Path)对象。

实施例

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)

答案 3 :(得分:0)

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

file.stat()

但是,如果您只想要最后一次修改日期,请使用以下命令:

for file in asm_pths:
    (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = file.stat()
    print(f'last modified: {time.ctime(mtime)}')

为了避免混淆和错误,我宁愿尽可能避免在同一项目中使用os.path和pathlib.Path,因为pathlib的路径由Path对象组成,并且os.path期望字符串作为路径。