从文件中提取所有日期时间戳(修改,创建,EXIF日期等)

时间:2017-11-24 20:31:34

标签: python python-3.x

我正在尝试提取CWD中所有文件的所有可用日期和时间戳。

例如 YYYYMMDD_HHMMSS(即使输出不太好):

lastwritetime     creationtime      datetakentime
20171124_190646   20171124_190646   20171124_190646   file1.txt
20171124_190646   20171124_190646   20171124_190646   file2.txt
20171124_190646   20171124_190646   20171124_190646   file3.txt

我收到(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)的语法错误。我暗示自己做错了什么?

代码:

import os
import time
cwd = os.getcwd()
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
timestr = time.strftime("%Y%m%d_%H%M%S")
files = open(cwd)
files = [f for f in os.listdir(cwd) if os.path.isfile(f)]
for f in files:
    print("created: %s" % time.ctime(os.path.getctime(file) timestr))
    print("last modified: %s" % time.mtime(os.path.getmtime(file) timestr))

2 个答案:

答案 0 :(得分:1)

    print("created: %s" % time.ctime(os.path.getctime(file) timestr))

如果你希望timestr成为ctime的第二个参数,你需要一个,逗号。但它只需要一个论点。

表示自1970年以来的秒数的标量数值与datetime之间存在差异。看起来您想将getctime()结果传递给utcfromtimestamp()。然后你将拥有一个可以调用strftime()的对象,它将接受timestr作为参数。

答案 1 :(得分:1)

我遇到了与你相同的错误。首先,我必须在定义“文件”之后移动第4行,或者在这种情况下,“f”。然后,第二个错误是print命令的语法。如果你在timestr之前放置一个逗号,它应该打印正常。第三个问题是我被拒绝了,显然是因为试图打开整个目录。

我已经将你的一些脚本重写为我认为更适合你需要的东西。

import glob
import time
import os

timestr = time.strftime("%Y%m%d_%H%M%S")
files = glob.glob('*.*')

for file in files:
    print('created: %s' % time.ctime(os.path.getctime(file)), timestr)
    print('last modified: %s' % time.ctime(os.path.getmtime(file)), timestr)

然而,看到你的第一个发布的例子,我想我可以修改它以匹配它。这就是我想出的:

import glob
import time
import os

files = glob.glob('*.*')

print('    created           modified        file_name')
for file in files:
    print('%s' % time.strftime("%Y%m%d_%H%M%S", time.gmtime(os.path.getctime(file))), end='   ')
    print('%s' % time.strftime("%Y%m%d_%H%M%S", time.gmtime(os.path.getmtime(file))), end='   ')
    print(file)

运行它给了我:

    created           modified        file_name
20170723_223307   20170723_223307   36e73b41-4366-4bf8-825f-9f16e41b1b41.tmp
20160928_232029   20171116_081039   desktop.ini
20171124_215147   20171124_215413   help.py
20171124_215637   20171124_221613   help2.py
20171124_214353   20171124_214353   test.txt

现在,只需要在正确的位置获取参数并配置打印命令以满足您的确切需求。

编辑:通过提取EXIF数据的请求,代码如下所示。原谅除了空白。

import glob
import time
import os
from PIL import Image

files = glob.glob('*.*')

print('      created               modified                EXIF            file_name')
for file in files:
    print('%s' % time.strftime("%Y:%m:%d %H:%M:%S", time.gmtime(os.path.getctime(file))), end='   ')
    print('%s' % time.strftime("%Y:%m:%d %H:%M:%S", time.gmtime(os.path.getmtime(file))), end='   ')
    try:
        print('%s' % Image.open(file)._getexif()[36867], end='   ')
    except:
        print('Not an image', end='          ')
    print(file)

请记住,您可以调整glob以仅获取jpg,png或任何您想要的内容。这个脚本可以获取所有内容,如果它不是图像,则会打印出失败的内容。