pandas 如何从Python数据库的目录中删除30天前的文件

k2fxgqgv  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(131)

我在目录中有一个名为model/year(当前年份)/month(当前月份)/date(当前日期)Example model/2023/01/24/mm.parquet, model/25/02/1998/mm.parquet的文件。
所以有几十个文件在我的目录上,所以我想删除文件,这是30天以上。例如,如果最新的文件是今天的日期2023/03/01,那么文件是30天以上,即2023/02/01应被删除。

import datetime
from datetime import datetime
# now=str(datetime.now().date())
import pandas as pd
def cleanup_model_output( days_to_keep ):
    path='C://Users/anubhav.sharma02/Downloads/21-01-1998.xlsx'
    date_of_file= int(path.split('/')[-1][0:2])
    now=str(datetime.now().date())
    a=int(now.split(',')[0][-2:])
    subtract=abs(a-date_of_file)
    if subtract > days_to_keep:
        os.remove('C://Users/anubhav.sharma02/Downloads/21-01-1998.xlsx')

有谁能帮我一下吗?我无法做出逻辑

yzuktlbb

yzuktlbb1#

考虑到删除依赖于文件路径(root/year/month/date/file.parquet)的文件的需求。根据您的代码,我理解您能够从数据库访问本地文件,并希望删除本地文件。
我做了同样的文件从存储帐户。你可以尝试同样的代码,这也为你工作。
首先,我将存储帐户挂载到我的容器data中,这是我的文件夹结构。

data
    2023
        02
            25
                mycsv21columns.csv
            26
                csv26.csv
                mycsv2.csv
            27
                csv27.csv
            28
                csv28.csv
        03
            01
                csv01.csv
            02
                csv02.csv

现在,我将删除文件夹25内的文件(例如超过过去6天)。
首先使用下面的代码获取所有文件列表:

import os
all_paths=[]
import glob
for file in glob.iglob("/dbfs/mnt/data/2023/**/*.csv",recursive=True):
    all_paths.append(file)
print("all paths : ",all_paths)

现在,建立所需的文件路径阵列使用日期像下面根据您的要求.

from datetime import datetime, timedelta
start = datetime.now()                                              
l=["/dbfs/mnt/data/"+(start-timedelta(days=day)).strftime("%Y/%m/%d")+"/*.csv" for day in range(1, 6)]
print("To list all files inside it: ",l)
req_paths=[]
for i in l:
    for j in glob.iglob(i):
        req_paths.append(j)
print("\nRequired paths: ",req_paths)

现在,根据以上两个列表,删除all_paths中的文件,而不是req_paths中的文件,如下所示。

for i in all_paths:
    if i not in req_paths:
        os.remove(i)

结果:

相关问题