создание соответствующих подпапок и запись части файла в новые файлы внутри этих подпапок с использованием Python - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть папка с именем «данные».Он содержит подпапки «data_1», «data_2» и «data_3».Эти подпапки содержат несколько текстовых файлов.Я хочу проанализировать все эти подпапки и сгенерировать соответствующие подпапки с тем же именем в другой папке с именем «processing_data».Я хочу также сгенерировать соответствующие файлы с «обработанным» в качестве префикса в имени и хочу записать все эти строки из исходного файла, где «1293» находится в исходных файлах.Я использую приведенный ниже код, но не могу получить требуемый результат.Ни подпапки "data_1", "data_2" и "data_3", ни файлы не создаются

import os
folder_name=""

def pre_processor(): 

    data_location="D:\data" # folder containing all the data
    for root, dirs, files in os.walk(data_location):
        for dir in dirs:
            #folder_name=""
            folder_name=dir
        for filename in files:
            with open(os.path.join(root, filename),encoding="utf8",mode="r") as f:
                processed_file_name = 'D:\\processed_data\\'+folder_name+'\\'+'processed'+filename
                processed_file = open(processed_file_name,"w", encoding="utf8")

                for line_number, line in enumerate(f, 1):
                    if "1293" in line:
                        processed_file.write(str(line))
         processed_file.close()    
pre_processor()

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вместо того, чтобы вручную создавать путь к новой папке, вы можете просто заменить имя папки. Кроме того, вы не создаете подпапки.

Этот код должен работать, но заменить косую черту в папке Linux:

 import os
folder_name=""

def pre_processor(): 

    data_location="data" # folder containing all the data
    for root, dirs, files in os.walk(data_location):
        for dir in dirs:
            # folder_name=""
            folder_name = dir
        for filename in files:
            joined_path = os.path.join(root, filename)
            with open(joined_path, encoding="utf8", mode="r") as f:
                processed_folder_name = root.replace("data/", 'processed_data/')
                processed_file_name = processed_folder_name+'/processed'+filename
                if not os.path.exists(processed_folder_name):
                    os.makedirs(processed_folder_name)
                processed_file = open(processed_file_name, "w", encoding="utf8")

                for line in f:
                    if "1293" in line:
                        processed_file.write(str(line))
                processed_file.close()
pre_processor()
0 голосов
/ 17 сентября 2018

Возможно, вам необходимо уточнить проблему, с которой вы столкнулись; например, файлы создаются, но пустые?

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

import os
folder_name=""

def pre_processor(): 

    data_location="D:\data" # folder containing all the data
    for root, dirs, files in os.walk(data_location):
        for dir in dirs:
            #folder_name=""
            folder_name=dir
        for filename in files:
            with open(os.path.join(root, filename), encoding="utf8",mode="r") as f:
                processed_file_name = 'D:\\processed_data\\'+folder_name+'\\'+'processed'+filename
                processed_file = open(processed_file_name,"w", encoding="utf8")

                for line_number, line in enumerate(f, 1):
                  if "1293" in line:
                     processed_file.write(str(line))
            processed_file.close() 


pre_processor()

2) Проверьте, существуют ли обработанные_данные и вложенные папки; если нет, сначала создайте их, так как этого не произойдет.

...