Функция Python внутри al oop, перебирающая текстовые файлы, работает только с первым файлом - PullRequest
0 голосов
/ 02 апреля 2020

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

import os
import re
import csv

def substitute_tips(table, tree_content):
    count = 0
    for l in table:
        print("element of the table", l[1])
        reg_tree = re.search(l[1],tree_content)
        if reg_tree is not None:
            #print("match in the tree: ",reg_tree.group())
            tree_content = tree_content.replace(reg_tree.group(), l[0])
            count = count + 1
        else:
            print("Not found: ",l[1])
            tree_content = tree_content
    print("Substitutions done: ",count)        
    return(tree_content)

path=os.getcwd()
table_name = "162_table.csv"
table = open(table_name) 
csv_table = csv.reader(table, delimiter='\t')
for root, dirs, files in os.walk(path, topdown=True):
    for name in files:
        if name.endswith(".tree"):
            print(Fore.GREEN + "Working on treefile", name)
            my_tree = open(name, "r")
            my_tree_content = my_tree.read()
            output_tree = substitute_tips(csv_table, my_tree_content)
            output_file = open(name.rstrip("tree") + "SPECIES_NAME.tre", "w")
            output_file.write(output_tree)    
            output_file.close()
        else:
            print(Fore.YELLOW + name ,Fore.RED + "doesn't end in .tree")

Возможно, это очень просто, но я новичок ie. Спасибо!

1 Ответ

0 голосов
/ 02 апреля 2020

Список files, возвращаемый os.walk, содержит только имена файлов, а не полные пути. Вы должны присоединиться к root с именами файлов, чтобы иметь возможность открывать их:

Изменить:

my_tree = open(name, "r")
...
output_file = open(name.rstrip("tree") + "SPECIES_NAME.tre", "w")

на:

my_tree = open(os.path.join(root, name), "r")
...
output_file = open(os.path.join(root, name.rstrip("tree") + "SPECIES_NAME.tre"), "w")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...