Как перебрать каждый файл в папке, выполнить некоторые действия с файлом и сохранить вывод в файл в другой папке Python - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть папка с несколькими файлами, например:

1980

1981

1982

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

1980_filtered

1981_filtered

1982_filtered

Возможно ли это сделать?

В настоящее время у меня есть некоторый код, который просматривает файлы в папке, выполняет некоторую фильтрацию для каждого файла и затем сохраняет все изменения каждого из них.файл в один массивный файл.Вот мой код:

import os
input_location = 'C:/Users/User/Desktop/mini_mouse'
output_location = 'C:/Users/User/Desktop/filter_mini_mouse/mouse'
for root, dir, files in os.walk(input_location):
    for file in files:
        os.chdir(input_location)
        with open(file, 'r') as f, open('NLTK-stop-word-list', 'r') as f2:
            mouse_file = f.read().split()  # reads file and splits it into a list
            stopwords = f2.read().split()
            x = (' '.join(i for i in mouse_file if i.lower() not in (x.lower() for x in stopwords)))
            with open(output_location, 'a') as output_file:
                output_file.write(x)

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Прежде всего вы должны начать с открытия NLTK-stop-word-list только один раз, поэтому я переместил его за пределы ваших петель.Во-вторых, os.chdir() является избыточным, вы можете использовать os.path.join(), чтобы получить текущий путь к файлу (и создать новый путь к файлу):

import os
input_location = 'C:/Users/User/Desktop/mini_mouse'
output_location = 'C:/Users/User/Desktop/filter_mini_mouse/'
stop_words_path = 'C:/Users/User/Desktop/NLTK-stop-word-list.txt'
with open(stop_words_path, 'r') as stop_words:
    for root, dirs, files in os.walk(input_location):
        for name in files:
            file_path = os.path.join(root, name)
            with open(file_path, 'r') as f:
                mouse_file = f.read().split()  # reads file and splits it into a list
                stopwords = stop_words.read().split()
                x = (' '.join(i for i in mouse_file if i.lower() not in (x.lower() for x in stopwords)))
                new_file_path = os.path.join(output_location, name) + '_filtered'
                with open(new_file_path, 'a') as output_file:
                    output_file.write(x)

PS: я позволил себе изменить некоторые из вашихимена переменных, так как они были частью встроенных слов python ('file' и 'dir').Если вы запустите __builtins__.__dict__.keys(), вы увидите их там.

0 голосов
/ 01 марта 2019

Вам необходимо указать, как называется каждый новый файл.Для этого в Python есть несколько хороших методов форматирования строк.К счастью, ваши новые нужные имена файлов легко сделать в цикле

import os
input_location = 'C:/Users/User/Desktop/mini_mouse'
output_location = 'C:/Users/User/Desktop/filter_mini_mouse/mouse'
for root, dir, files in os.walk(input_location):
    for file in files:
        new_file = "{}_filtered.txt".format(file)
        os.chdir(input_location)
        with open(file, 'r') as f, open('NLTK-stop-word-list', 'r') as f2:
            mouse_file = f.read().split()  
            stopwords = f2.read().split()
            x = (' '.join(i for i in mouse_file if i.lower() not in (x.lower() for x in stopwords)))
            with open(output_location+'/'+new_file, 'w') as output_file: # Changed 'append' to 'write'
                output_file.write(x)

Если вы работаете в Python 3.7, вы можете сделать

new_file = f"{file}_filtered.txt"

и

with open(f"{output_location}/{new_file}", 'w') as output_file:
    output_file.write(x)
...