我正在尝试获取特定目录中每个文件的数据。现在我只想尝试最后修改日期。看起来我需要将此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
答案 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.stat
的path
参数必须是字符串,但您传递的是Path
的实例。您需要使用Path
将str
转换为字符串。
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期望字符串作为路径。