微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Windows 10 上从 Python 获取准确的文件创建日期

如何解决在 Windows 10 上从 Python 获取准确的文件创建日期

我正在尝试使用 python 获取文件的准确(毫秒分辨率)创建日期。

在 Window 上获得准确创建日期的方法是使用 wmic。 所以我准备了一个简单的shell命令来读取创建日期:

wmic datafile where name="C:\\Users\\Public\\test.txt" get creationdate | findstr /brc:[0-9]

在 Win10 上通过 CMD shell 运行正常(如果文件在那里) 然后我尝试使用子进程从 python 运行相同的命令:

import subprocess
from subprocess import check_output,STDOUT,CalledProcessError
cmd = 'wmic datafile where name="C:\\Users\\Public\\test.txt" get creationdate | findstr /brc:[0-9]'
proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)
(out,err) = proc.communicate()
print( "program output:",out)


try:
    o = check_output(cmd,stderr=STDOUT,shell=True)
    returncode = 0
except CalledProcessError as ex:
    o = ex.output
    returncode = ex.returncode
    if returncode != 1: # some other error happened
        raise
finally:
    print(o)

但我收到了同样的错误信息:

节点 - 用户名 错误: 说明 = 无效查询

对于如何获取有关修复错误的更多信息,您有什么建议吗?

解决方法

import subprocess
from subprocess import check_output,STDOUT,CalledProcessError
cmd = 'wmic datafile where name="C:\\\\Users\\\\Public\\\\test.txt" get creationdate | findstr /brc:[0-9]'
proc = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)
(out,err) = proc.communicate()
print( "program output:",out.decode().rstrip())

out.decode().rstrip() 返回一个 string,类似于 '20210113222350.636280+060'

说明

  1. 转义 Windows 路径中的所有 \ (Reverse Solidus)。
  2. 检查返回值类型:type(out) ==> <class 'bytes'>;将其解码为字符串。
  3. 使用方法 rstrip() 去除所有尾随空格。

注意:import os; os.path.getctime("C:\\Users\\Public\\test.txt") 返回一个 float1610573030.6362805,这是一个纪元时间格式,恕我直言(GMT Wednesday,13 January 2021 21:23:50.636)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。