【问题标题】:Outputting timestamps from a list of files从文件列表中输出时间戳
【发布时间】:2020-08-07 00:18:30
【问题描述】:

我在为目录中的文件输出时间戳时遇到问题。想要列出到达某个时间窗口的时间戳,目前甚至无法获得输出。不知道我做错了什么并撞墙了自动取款机

from datetime import datetime, timedelta
from os import scandir

DIR = "/home/user/directory"
TIME_FORMAT = "%Y-%m-%d%H:%M:%S.%fZ"


def convert_timestamps():
    """converting timestamps to human readable"""
    # timestamp = datetime.utcnow() - timedelta(days=7)
    timestamp = datetime.utcfromtimestamp
    file_times = timestamp.strftime(TIME_FORMAT)
    return file_times

def get_files():
"""getting files from dir"""
    dir_filenames = scandir(DIR)
    for filename in dir_filenames:
        if filename.is_file():
            file_stat = os.stat(str(filename))
            # info = os.stat(filename)
            print("Last Modified time: {}".format(filename.name, convert_timestamps(file_stat.st_mtime)))



if __name__ == 'main':
    get_files()

下面的sn-p可以工作,但显然不是什么程序

DIR = "/home/user/directory"
TIME_FORMAT = "%Y-%m-%d%H:%M:%S.%fZ"


file_stat = os.stat(DIR)
timestamp = datetime.utcnow() - timedelta(days=7)
file_times = timestamp.strftime(TIME_FORMAT)
print("Last mod time are: ", file_times)

【问题讨论】:

  • 您的运行的 sn-p 根本不使用 file_stat 变量。目录中是否还有文件,scandir 是否在对其进行迭代?
  • 你说得对,这是我的先见之明。是的,目录中有文件,没有 scandir 似乎不起作用

标签: python python-3.x datetime unix-timestamp


【解决方案1】:

建议查看pathlib 和/或glob 以简化操作。以这里为例

from datetime import datetime, timezone
from pathlib import Path

DIR = "/home/user/directory"
TIME_FORMAT = "%Y-%m-%d%_H:%M:%S.%fZ"

dir_content = list(Path(DIR).glob('*')) # give me anything...

for p in dir_content:
    if p.is_file():
        timestring = (
               datetime.fromtimestamp(p.stat().st_mtime, timezone.utc)
               .strftime(TIME_FORMAT)
               )
        print(f"{p.name} \tLast Modified time: {timestring}")

小提示:由于您明确需要 UTC(“Z”),我宁愿明确设置 timezone.utc 而不是使用 utcfromtimestamp(即...confusing)。

【讨论】:

    【解决方案2】:

    主要问题是模块名称。您需要检查__main__,而不是main。您也没有将任何参数传递给 convert_timestamps 函数。

    这段代码应该可以工作:

    from datetime import datetime, timedelta
    from os import scandir
    import os
    
    DIR = "C:/tmp"  #"/home/user/directory"
    TIME_FORMAT = "%Y-%m-%d %H:%M:%S.%fZ"
    
    
    def convert_timestamps(stmp):
        """converting timestamps to human readable"""
        # timestamp = datetime.utcnow() - timedelta(days=7)
        timestamp = datetime.utcfromtimestamp(stmp)
        file_times = timestamp.strftime(TIME_FORMAT)
        return file_times
    
    def get_files():
        """getting files from dir"""
        dir_filenames = scandir(DIR)
        for filename in dir_filenames:
            if filename.is_file():
                file_stat = os.stat(filename)
                # info = os.stat(filename)
                print("{} \tLast Modified time: {}".format(filename.name, convert_timestamps(file_stat.st_mtime)))
    
    if __name__ == '__main__':   # must be __main__
        get_files()
    

    输出

    newfile.txt     Last Modified time: 2020-07-23 03:06:20.470809Z
    oktatext.png    Last Modified time: 2020-07-01 16:34:03.057133Z
    output.xlsx     Last Modified time: 2020-08-03 14:38:47.973999Z
    python.png      Last Modified time: 2020-06-29 14:33:03.803685Z
    pythonlogo.jpg  Last Modified time: 2020-07-06 02:53:09.642297Z
    SomeFile2.dll   Last Modified time: 2020-08-01 21:26:42.978218Z
    

    【讨论】:

    • 我错过了主要内置的欣赏它!
    猜你喜欢
    • 2018-04-14
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多