Python使用PySimpleGUI实现文本文件按行逆序输出
TXT文件按行逆序展示实现方案
需求说明
使用PySimpleGUI读取.txt格式文本文件的内容,将内容按行逆序填充至Multiline多行组件中:
- 逆序规则:原文件最后一行最先展示、第一行最后展示,每行内部的字符顺序保持不变
- 效果示例:原文件逐行存储line1、line2、line3、line4、line5,最终逐行展示line5、line4、line3、line2、line1
原有方案问题分析
之前尝试的两种实现均不符合要求,错误原因一致:都是对读取到的完整文本字符串直接做全量反转,会颠倒所有字符的顺序,导致每行内部字符也被反转,出现5enil、4enil这类错误输出。
错误代码参考:
# 错误方案1 with open('file.txt','r') as f: x=f.read() print(reversed(x)) # 错误方案2 with open('file.txt', 'r') as f: x=f.read() print(x[::-1])
正确实现逻辑
核心思路:不要直接反转整个文本字符串,先将文本按行拆分为列表,仅反转行的排列顺序,每行内部字符保持不动,再将反转后的行列表拼接为完整文本传入Multiline组件即可。
完整可运行代码:
import PySimpleGUI as sg # 界面布局 layout = [ [sg.Text('选择TXT文件:'), sg.Input(), sg.FileBrowse(file_types=(("文本文件", "*.txt"),))], [sg.Multiline(size=(70, 20), key='-MULTILINE-')], [sg.Button('读取并按行逆序展示'), sg.Button('退出')] ] window = sg.Window('TXT行逆序查看器', layout) while True: event, values = window.read() if event in (sg.WIN_CLOSED, '退出'): break if event == '读取并按行逆序展示': file_path = values[0] if not file_path: sg.popup('请先选择目标TXT文件') continue # 读取并处理文件 with open(file_path, 'r', encoding='utf-8') as f: # 按行读取,得到每行内容组成的列表 line_list = f.readlines() # 仅反转行顺序,不改动行内字符 reversed_line_list = reversed(line_list) # 拼接为完整文本 final_content = ''.join(reversed_line_list) # 更新到多行组件 window['-MULTILINE-'].update(final_content) window.close()
关键注意点
- 读取文件优先使用
readlines()方法:该方法会自动按换行符拆分文本,返回值为行内容构成的列表,每个元素对应一整行内容(包含行尾换行符) - 反转操作作用于行列表即可:使用
reversed(line_list)或者line_list[::-1]都能实现行顺序反转,两种写法都不会改动每行内部的字符顺序 - 打开文件时建议显式指定
encoding='utf-8',避免不同操作系统默认编码差异导致的中文乱码问题
内容的提问来源于stack exchange,提问作者SatsumaSegment
相关产品推荐
相关产品推荐

