Копировать файлы с датой их создания в указанном диапазоне c - PullRequest
0 голосов
/ 04 августа 2020

'' 'В настоящее время я пытаюсь скопировать файлы из одной папки в другую с помощью shutil, но я не могу заставить его работать, процесс говорит, что он завершен, но ничего не происходит?' ''

Текущие критерии Я добавил raw_input, который позволяет пользователю выбирать расширение файла. Следующим критерием, который я хочу добавить, является функция диапазона дат, поэтому я могу выбрать диапазон дат, например: 17.07.2020 - 04.08.2020 или дату дня.

* ОБНОВЛЕННЫЙ КОД

import os
import shutil
import os.path, time
from pip._vendor.distlib.compat import raw_input

os.chdir('C://')
src = ("C:/Users/eldri/OneDrive/Desktop/")
dst = ("C:/Users/eldri/OneDrive/Desktop/output")
ext = raw_input("[+] File format: ")
created = (" last modified: %s" % time.ctime(os.path.getmtime(src)))
start = raw_input("[+] Date start: ")
end = raw_input("[+] Date end: ")

def date_to_num(date):
    return int("".join(date.split('/')[::-1]))

def date_in_range(date, start, end):
    return date_to_num(date) > date_to_num(start) and date_to_num(date) < date_to_num(end)

for filename in os.listdir(src):
    if filename.endswith('.'+ext) and created.startswith(start) and created.endswith(end):
        shutil.copy( src + filename, dst)
        print("[+] File transferred "+filename + created)
    else:
        print("[+] File not transferred "+filename + created)
        
print("[+] Transfer complete")

Я смотрел, может быть, pandas? но не уверен, так как python.

example on terminal
file extension = .csv
startdate = 12/05/2020
enddate = 07/08/2020

как только пользователь введет эти поля, он скопирует только необходимые файлы.

Текущий вывод созданных файлов являются:

[+] File transferred BASE1011.xls last modified: Fri Jul 17 10:11:40 2020
[+] File transferred BASE1112.xls last modified: Fri Jul 17 10:11:40 2020
[+] File transferred BASE1213.xls last modified: Fri Jul 17 10:11:40 2020
[+] File transferred BASE1314.xls last modified: Fri Jul 17 10:11:40 2020
[+] File transferred BASE1415.xls last modified: Fri Jul 17 10:11:40 2020

Я хочу, чтобы они были в более простом формате для ввода пользователем, как описано выше: пример: начало 12.05.2020 дата окончания = 07.08.2020

Спасибо вам за вашу помощь, я не лучший в python, но я пытаюсь научиться, поэтому любая помощь будет потрясающей.

Спасибо

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Я продолжил вашу работу, используя time.ctime(os.path.getmtime(src)) и создал функцию dateRange(createdDate, startDate, endDate), которая использует datetime для преобразования строк в объекты datetime и возвращает True или False, если дата создания находится между датами начала и окончания

import os
import shutil
import time
from datetime import datetime

src = "C:/Users/eldri/OneDrive/Desktop/"
dst = "C:/Users/eldri/OneDrive/Desktop/output"
ext = input("[+] File format: ")  # "txt"
start = input("[+] Date start: ")  # "01/07/2020"
end = input("[+] Date end: ")  # "30/07/2020"


def dateRange(createdDate, startDate, endDate):
    """determines if date is in range"""
    createdDate = datetime.strptime(createdDate, '%a %b %d %H:%M:%S %Y')
    startDate = datetime.strptime(startDate, '%d/%m/%Y')
    endDate = datetime.strptime(endDate, '%d/%m/%Y')
    return startDate < createdDate < endDate


for filename in os.listdir(src):
    created = time.ctime(os.path.getmtime(src + filename))
    if filename.endswith('.' + ext) and dateRange(created, start, end):
        shutil.copy(src + filename, dst)
        print("[+] File transferred " + filename + created)
    else:
        print("[+] File not transferred " + filename + created)

print("[+] Transfer complete")

Я добавил примеры в конце переменных ext, start и end, чтобы дать представление о формате

1 голос
/ 06 августа 2020

Для указанного диапазона c вы можете:

создать функцию, которая анализирует дату до числа:

def date_to_num(date):
    return int("".join(date.split('/')[::-1]))

def date_in_range(date, start, end):
    return date_to_num(date) > date_to_num(start) and date_to_num(date) < date_to_num(end)

А затем использовать это так:

date_in_range("03/02/2020", "01/01/2020", "05/05/2020")
...