Python слияние файлов в каталоге - PullRequest
0 голосов
/ 16 мая 2018

У меня есть тысячи файлов в каталоге с этим шаблоном ГГГГ / ММ / ДД / ЧЧ / ММ:

  • 201801010000.txt
  • 201801010001.txt
  • 201801010002.txt

Я хочу сохранить только часы, поэтому мне нужно объединять 60 файлов в один для каждого часа каждого дня. Я не знаю, как искать в имени файла, чтобы получить 60 файлов, которые я хочу. Это то, что я написал

def concat_files(path):
    file_list = os.listdir(path)
    with open(datetime.datetime.now(), "w") as outfile:
        for filename in sorted(file_list):
            with open(filename, "r") as infile:
                outfile.write(infile.read())

Как мне назвать файл, чтобы сохранить дату? Я сейчас использую datetime, но он переопределяет текущее имя файла. С моим кодом я объединяю все файлы в один, я должен сливать каждый% 60 в другой файл.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Вы были не так далеко, вам просто нужно поменять логику:

file_list = os.listdir(path)
for filename in sorted(file_list):
    out_filename = filename[:-6] + '.txt'
    with open(out_filename, 'a') as outfile:
        with open(path + '/' + filename, 'r') as infile:
            outfile.write(infile.read())
0 голосов
/ 17 мая 2018

Попробуйте это.

file_list = os.listdir(path)
for f in { f[:-6] for f in file_list }:
    if not f:
        continue
    with open(f + '.txt', 'a') as outfile:
        for file in sorted([ s for s in file_list if s.startswith(f)]):
            with open(path + '/' + file, 'r') as infile:
                outfile.write(infile.read())
            #os.remove(path + '/' + file) # optional
0 голосов
/ 16 мая 2018

Вы можете использовать glob, чтобы получить только те файлы, которые вы хотите.Это позволяет вам передавать шаблон для сопоставления при поиске файлов.В последней строке ниже будут найдены только файлы, которые начинаются с '2018010100', имеют два символа и заканчиваются '.txt'

from glob import glob

def concat_files(dir_path, file_pattern):
    file_list = glob(os.path.join(dir_path, file_pattern))
    with open(datetime.datetime.now(), "w") as outfile:
        for filename in sorted(file_list):
            with open(filename, "r") as infile:
                outfile.write(infile.read())

concat_files('C:/path/to/directory', '2018010100??.txt')
...