Мне нужно найти все текстовые файлы во всех подпапках, созданных на определенную дату, открыть их и скопировать содержимое в один текстовый файл

Моя цель - взять содержимое всех текстовых файлов в подпапках, созданных сегодня, и переместить их в один существующий файл report.txt, но я не могу найти хороший способ сделать это. Я не очень опытен в кодировании, поэтому любая помощь будет очень признательна. Вот что у меня есть на данный момент (я знаю, что это мусор):

if getmtime == today:
   with open(glob.iglob(drive + "://CADIQ//CADIQ_JOBS//?????????????????????")) as f:
      for line in f:
         content += line
   with open(reportFile, "a") as f:
      f.write(content)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я бы начал с создания объекта desired_date, который является datetime.date. Затем вы можете отформатировать эту дату в строку, которая составляет шаблон, который вы хотите искать в своем глобусе. Шаблон глобуса не заботится о времени, только о дате.

from pathlib import Path
import datetime

desired_date = datetime.date(year=2020, month=12, day=22)
pattern = "13.2.1_" + desired_date.strftime("%y_%m_%d") + "_*"

for path in Path("path/to/folders").glob(pattern):
    if not path.is_dir():
        continue
    print(path)

Оттуда вы можете посетить каждый путь, подставить все текстовые файлы по текущему пути и накапливать строки в каждом текстовом файле. Наконец, запишите все в один файл.

import glob

contents = b''
for file in glob.glob('./*/*.txt'): # u can change as per your directory
    fname = file.split(r'\\')[-1]
    with open(fname, 'rb') as f1:
        contents += f1.read()
with open('report.txt','wb') as rep:
    rep.write(contents)

Надеюсь, это так поможет :) Лучше попробуйте читать или записывать файлы в байтах, потому что иногда может быть вероятность повреждения данных.

Что представляет содержимое = b ''?

Dark Horse Dumpling 23.12.2020 13:40

Это просто для того, чтобы определить, что все содержимое будет в двоичном формате

Nanthakumar J J 23.12.2020 14:15
Ответ принят как подходящий

Попробуйте это, основываясь на Как вывести список всех файлов каталога?

import os, time

def last_mod_today(path):
    '''
    return True if getmtime and time have year, mon, day coincinding in their localtime struct, False else
    '''
    t_s = time.localtime(os.path.getmtime(path))
    today = time.localtime(time.time())
    return t_s.tm_mday==today.tm_mday and t_s.tm_year == today.tm_year and t_s.tm_mon == today.tm_mon

name_to_path = lambda d,x:os.path.normpath(os.path.join(os.path.join(os.getcwd(), d),x))

def log_files(d):
    '''
    walking through the files in d
    log the content of f when last modif time for f is today
    WARNING : what happens when the file is a JPEG ?
    '''
    scand_dir = os.path.join(os.getcwd(), d)
    print(f"scanning {scand_dir}...")
    (_, _, filenames) = next(os.walk(scand_dir))
    log = open("log.txt", 'a')
    for f in filenames:
        if last_mod_today(name_to_path(d,f)):
            with open(name_to_path(d,f), 'r') as todays_file:
                log.write('##############################\n')
                log.write(f"file : {name_to_path(d,f)}\n")
                log.write(todays_file.read()) 
                log.write('\n')
                log.write('##############################\n')
    log.close()

#first scanning files in the current directory
(_, dirnames, _) = next(os.walk('./'))
log_files('./')
#then crawling through the subdirs (one level)
for d in dirnames:
    log_files(d)

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

smed 22.12.2020 20:30

Пробуем это прямо сейчас. Я дам вам знать.

Dark Horse Dumpling 22.12.2020 21:26

Посмотрите на ссылку над кодом, так как os.walk также предоставит вам каталоги, через которые вы хотите зациклиться. Дайте мне знать, как это происходит. Ты можешь это сделать !

smed 22.12.2020 21:38

Спасибо, мужик. Я очень ценю это. Таким образом, первая попытка вернула неправильные файлы, но что-то вернула, так что это прогресс, лол.

Dark Horse Dumpling 22.12.2020 22:10

Итак, в настоящее время он нацелен на каталог, в котором находится командный файл, но мне нужно, чтобы он нацеливался на все подкаталоги в другом каталоге.

Dark Horse Dumpling 22.12.2020 22:31

изменить параметр os.walk()

smed 22.12.2020 22:38

Возникла небольшая проблема. Мне нужно получить все текстовые файлы из подпапок. Я не буду знать названия подпапок, потому что они меняются в зависимости от времени создания. Что бы я ввел для параметра os.walk(), чтобы получить это?

Dark Horse Dumpling 22.12.2020 22:51

Сколько у вас папок в папках в папках? (насколько глубоко мы будем сканировать?

smed 23.12.2020 13:21

Текстовые файлы находятся в подпапках папки, для которой у меня есть путь. FolderIKnow/SubfoldersIHaveToObtainRelativelyByDate/TextFile‌​s

Dark Horse Dumpling 23.12.2020 13:35

хорошо, у меня должно быть что-то подходящее

smed 23.12.2020 14:12

Я сделал некоторые изменения в первом ответе выше. Не забудьте пометить его как принятый ответ, если он соответствует вашим потребностям!

smed 23.12.2020 14:32

Проверяем это через мгновение. Если это сработает, я обязательно отмечу это как принятый ответ. Большое вам спасибо за вашу помощь. Ты обалденный.

Dark Horse Dumpling 23.12.2020 14:41

На самом деле я не использовал ваш код для T, но контент и знания, которыми вы поделились, определенно помогли мне в этом, поэтому я отмечаю ваш ответ как принятый ответ. Большое вам спасибо за вашу помощь!

Dark Horse Dumpling 23.12.2020 15:43

Не за что ! Удачи

smed 23.12.2020 16:48

Другие вопросы по теме