用tkinter选择多个文本文件后,如何同时打开和操作它们?

时间:2018-07-25 14:07:20

标签: python regex python-3.x file tkinter

Python noob在这里:

我正在尝试通过使用tkinter选择多个文本文件来加快文件编辑的速度,但是我不知道如何打开它们并同时对其全部进行编辑以删除<_io.TextIOWrapper name='xyz.txt' mode='w' encoding='UTF-8'>

我的代码:

import re
from Tkinter import *
from tkFileDialog import askopenfilenames

filename = askopenfilenames()

f = open(filename, "r")

lines = f.readlines()

f.close()

f = open(filename, "w")

for line in lines:
    line = re.sub('<(.|\n)*?>', "", line)
    f.write(line)

f.close()

它可以与askopenfilename(不是复数)一起使用,并且我可以删除不需要的字符串。

任何提示将不胜感激!

1 个答案:

答案 0 :(得分:0)

您没有使用列表中的每个文件名。因此,您需要在askopenfilenames()创建的列表上运行一个for循环。

根据我的IDE askopenfilenames()中的工具提示,返回一个列表。

def askopenfilenames(**options):
    """Ask for multiple filenames to open

    Returns a list of filenames or empty list if
    cancel button selected
    """
    options["multiple"] = 1
    return Open(**options).show()

我将您的变量文件名更改为文件名,因为它是一个列表,这更有意义。然后,我在该列表上运行了一个for循环,它应该可以按需工作。

请尝试以下代码。

import re
from Tkinter import *
from tkFileDialog import askopenfilenames

filenames = askopenfilenames()

for filename in filenames:
    f = open(filename, "r")

    lines = f.readlines()

    f.close()

    f = open(filename, "w")

    for line in lines:
        line = re.sub('<(.|\n)*?>', "", line)
        f.write(line)

    f.close()

使用几个if语句,我们可以防止在不选择任何内容或选择不兼容的文件类型时可能出现的最常见错误。

import re
from Tkinter import *
from tkFileDialog import askopenfilenames

filenames = askopenfilenames()

if filenames != []:
    if filenames[0] != "":
        for filename in filenames:
            f = open(filename, "r")

            lines = f.readlines()

            f.close()

            f = open(filename, "w")

            for line in lines:
                line = re.sub('<(.|\n)*?>', "", line)
                f.write(line)

            f.close()