繁体   English   中英

迭代文本文件的循环中的 Python 函数仅适用于第一个文件

[英]Python function within a loop iterating over text files only works on the first file

我正在编写一个简单的脚本,它循环遍历一些文本文件并使用一个函数来替换在 .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")

这可能很容易,但我是新手。 谢谢!

os.walk返回的files列表只包含文件名而不是完整的路径名。 您应该将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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM