Mesclar vários arquivos de texto

Um blog para mesclar vários arquivos de texto usando o módulo wxPython. Aqui está um exemplo de blog:
C:\pythoncode\blog\txtmerge.py

insira a descrição da imagem aqui

Na programação Python, muitas vezes precisamos lidar com arquivos de texto. Às vezes, podemos precisar combinar vários arquivos de texto em um arquivo para processamento ou análise posterior. Neste artigo, mostraremos como usar o módulo wxPython para escrever um programa simples que permite ao usuário selecionar vários arquivos de texto e mesclá-los em um arquivo na ordem em que foram selecionados.

Preparação

Primeiro, precisamos instalar o módulo wxPython. Você pode usar o seguinte comando para instalar:

pip install wxPython

Após a conclusão da instalação, podemos começar a escrever programas.

Programação

Usaremos o módulo wxPython para criar um programa GUI simples. Os usuários podem selecionar os arquivos de texto a serem mesclados por meio deste programa e mesclá-los em um arquivo de acordo com a ordem de seleção.

Aqui está o código do programa:

import wx
import datetime
import os

class MergeApp(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="文档合并工具", size=(400, 300))
        
        self.panel = wx.Panel(self)
        
        self.file_list = wx.ListBox(self.panel, style=wx.LB_MULTIPLE)
        self.merge_button = wx.Button(self.panel, label="合并文档")
        self.merge_button.Bind(wx.EVT_BUTTON, self.on_merge)
        
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.file_list, 1, wx.EXPAND | wx.ALL, 10)
        self.sizer.Add(self.merge_button, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        
        self.panel.SetSizer(self.sizer)
        
    def on_merge(self, event):
        selected_files = self.file_list.GetSelections()
        if len(selected_files) < 2:
            wx.MessageBox("请选择至少两个文档进行合并!", "错误", wx.OK | wx.ICON_ERROR)
            return
        
        merged_content = ""
        
        for index in selected_files:
            file_path = self.file_list.GetString(index)
            with open(file_path, "r", encoding="utf-8") as file:
                merged_content += file.read()
        
        merge_datetime = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        merge_filename = f"merge_{
      
      merge_datetime}.txt"
        
        with open(merge_filename, "w", encoding="utf-8") as merged_file:
            merged_file.write(merged_content)
        
        wx.MessageBox(f"文档合并完成,合并文档保存为 {
      
      merge_filename}!", "完成", wx.OK | wx.ICON_INFORMATION)
        
        self.Close()
        
if __name__ == "__main__":
    app = wx.App()
    frame = MergeApp()
    
    wildcard = "Text files (*.txt)|*.txt"
    dialog = wx.FileDialog(None, message="请选择要合并的文档", wildcard=wildcard, style=wx.FD_OPEN | wx.FD_MULTIPLE)
    
    if dialog.ShowModal() == wx.ID_OK:
        file_paths = dialog.GetPaths()
        frame.file_list.AppendItems(file_paths)
    
    dialog.Destroy()
    
    frame.Show()
    app.MainLoop()

execute o programa

Salve o código acima como merge_app.pyum arquivo. Em seguida, inicie o programa executando o seguinte comando na linha de comando:

python merge_app.py

A janela do programa será exibida e você poderá clicar no botão “Navegar” para selecionar os arquivos de texto a serem mesclados. Os arquivos selecionados serão exibidos na caixa de listagem. Após selecionar pelo menos dois arquivos, clique no botão “Mesclar Documentos”, o programa irá mesclar o conteúdo dos arquivos em um novo arquivo de texto de acordo com a ordem de seleção, e exibirá as informações da conclusão da mesclagem na mensagem pop-up caixa.

todos os códigos

import wx
import datetime
import os

class MergeApp(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="文档合并工具", size=(400, 300))
        
        self.panel = wx.Panel(self)
        
        self.file_list = wx.ListBox(self.panel, style=wx.LB_MULTIPLE)
        self.merge_button = wx.Button(self.panel, label="合并文档")
        self.merge_button.Bind(wx.EVT_BUTTON, self.on_merge)
        
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.file_list, 1, wx.EXPAND | wx.ALL, 10)
        self.sizer.Add(self.merge_button, 0, wx.ALIGN_CENTER | wx.ALL, 10)
        
        self.panel.SetSizer(self.sizer)
        
    def on_merge(self, event):
        selected_files = self.file_list.GetSelections()
        if len(selected_files) < 2:
            wx.MessageBox("请选择至少两个文档进行合并!", "错误", wx.OK | wx.ICON_ERROR)
            return
        
        merged_content = ""
        
        for index in selected_files:
            file_path = self.file_list.GetString(index)
            with open(file_path, "r", encoding="utf-8") as file:
                merged_content += file.read()
        
        merge_datetime = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        merge_filename = f"merge_{
      
      merge_datetime}.txt"
        
        with open(merge_filename, "w", encoding="utf-8") as merged_file:
            merged_file.write(merged_content)
        
        wx.MessageBox(f"文档合并完成,合并文档保存为 {
      
      merge_filename}!", "完成", wx.OK | wx.ICON_INFORMATION)
        
        self.Close()
        
if __name__ == "__main__":
    app = wx.App()
    frame = MergeApp()
    
    wildcard = "Text files (*.txt)|*.txt"
    dialog = wx.FileDialog(None, message="请选择要合并的文档", wildcard=wildcard, style=wx.FD_OPEN | wx.FD_MULTIPLE)
    
    if dialog.ShowModal() == wx.ID_OK:
        file_paths = dialog.GetPaths()
        frame.file_list.AppendItems(file_paths)
    
    dialog.Destroy()
    
    frame.Show()
    app.MainLoop()

Resumir

Usando o módulo wxPython, escrevemos um programa simples que mescla convenientemente vários arquivos de texto. O programa fornece uma interface amigável que permite aos usuários selecionar facilmente arquivos e realizar operações de mesclagem. Você pode modificar e estender o código de acordo com suas necessidades para atender a requisitos mais específicos.

Espero que este blog tenha sido útil para você! Se você tiver alguma outra dúvida, sinta-se à vontade para perguntar.

Acho que você gosta

Origin blog.csdn.net/winniezhang/article/details/132378441
Recomendado
Clasificación