【问题标题】:Organising Files as per timestamp in python根据python中的时间戳组织文件
【发布时间】:2021-07-13 17:40:45
【问题描述】:

有一个任务,我必须使用它们的时间框架将文件分组

假设我有像“2018/12/12 11:32:34 xyz.txt”这样的文件

我的任务是,我必须使用 python 首先从文件中提取时间范围,然后通过首先按年创建目录然后按月创建目录,最后是它们各自年份内的所有文件,将它们分组和几个月

就像上面 egs 中的文件一样,它应该位于类似的路径中 Files/2018/December/file.txt

只需要关于使用哪些库以及如何解决问题的帮助

【问题讨论】:

  • 如果您对库感兴趣,您需要使用库存库:datetime.datetime 将您的时间转换为 DateTime 类,并使用os 模块创建文件夹并将文件复制到该文件夹​​。我想就是这样。
  • 好的.. 只是想要一些关于如何解决问题的提示.. 就像我已经阅读了如何使用 os 创建目录但是我应该如何将文件放在正确的目录中在时间戳上

标签: python file operating-system organization


【解决方案1】:

因此,您希望将带有时间戳名称的文件复制到目录中。我们的输入数据:

  1. 带有时间戳文件的目录
  2. 我们需要保存文件的目录。

我们要求用户输入这些目录,然后,我们需要打开目录 1(带有时间戳文件的目录)并逐步读取每个目录。 我们可以获取目录中的所有文件名并像列表中一样迭代,在文件名中解析日期。我们得到第一个文件名并用空格分割文件名。现在我们在第一个数组元素和第二个数组元素中有一个日期和时间。 现在我们将使用日期时间库将日期和时间转换为日期时间。这样做之后,我们可以很容易地得到年、月、日等。 现在我们可以检查年份和月份并创建一个与该年份和月份相关的文件夹。如果文件夹不存在,我们可以创建它。之后 - 使用 copy 复制该文件夹中的文件

编辑。我的解决方案:

import glob
import os
from datetime import datetime
from shutil import copyfile


def getListOfFilenamesInFolder(src):
    filenamesWithPath = glob.glob(f"{src}\\*.txt")
    filenames = [filename.split('\\')[-1] for filename in filenamesWithPath]
    return filenames


def parseFilename(filename):
    splittedFilename = filename.split(' ')
    dateFilename = splittedFilename[0]
    timeFilename = splittedFilename[1]
    datetimeFilename = datetime.strptime(f'{dateFilename} {timeFilename}', '%Y-%m-%d %H.%M.%S')
    return datetimeFilename



def createFolderIfNotExist(dest, datetimeFilename):
    path = os.path.join(dest, 'File')
    if not os.path.exists(path):
        os.mkdir(path)
    path = os.path.join(path,  str(datetimeFilename.year))
    if not os.path.exists(path):
        os.mkdir(path)
    path = os.path.join(path, datetimeFilename.strftime("%b"))
    if not os.path.exists(path):
        os.mkdir(path)
    return path
    pass


def makeSortingByFilenames(src, dest):
    listOfFilenames = getListOfFilenamesInFolder(src)
    print(listOfFilenames)
    for filename in listOfFilenames:
        datetimeFilename = parseFilename(filename)
        path = createFolderIfNotExist(dest, datetimeFilename)
        copyfile(os.path.join(src, filename), os.path.join(path, ' '.join(filename.split(' ')[2:])))

if __name__ == '__main__':
    srcDirectory = input()
    destDirectory = input()
    makeSortingByFilenames(srcDirectory, destDirectory)

我有那个结构文件夹。如果您有其他文件名,则需要将datetimeFilename = datetime.strptime(f'{dateFilename} {timeFilename}', '%Y-%m-%d %H.%M.%S') 更改为您的特定文件名。

截图:

我的输入和输出: 结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2019-06-10
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多