MmiaoLikeornor 2022-08-10 21:11 采纳率: 83.3%
浏览 43
已结题

python怎样读取大型文本文件?

tkinter的多行文本框组件无法读取大型文本文件,使用22mb的大型txt格式小说作为测试,读取失败,这是无法读取的代码:

#多行文本组件的应用
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
import os
mywindow = tk.Tk()
mywindow.title('记事本')
mywindow.geometry('400x300')
filename = ''

def openfile():
  global filename
  filename = filedialog.askopenfilename(defaultextension='.txt')
  if filename=='':
    filename=None
  else:
    mywindow.title(os.path.basename(filename))
    mytext.delete(1.0,tk.END)
    f=open(filename,'r',encoding='UTF-8')
    mytext.insert(tk.INSERT,f.read())
    f.close()

def savefile():
  global filename
  f=filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt')
  filename=f
  fh=open(f,'w',encoding='UTF-8')
  msg=mytext.get(1.0,tk.END)
  fh.write(msg)
  fh.close()
  mywindow.title(os.path.basename(f))

b_open=tk.Button(mywindow,text='打开',command=openfile)
b_open.pack(side=tk.LEFT)
b_save=tk.Button(mywindow,text='保存',command=savefile)
b_save.pack()
mytext=tk.Text(mywindow)
mytext.pack()
mywindow.mainloop()
  • 写回答

4条回答 默认 最新

  • a5156520 2022-08-10 21:54
    关注

    通过百度搜索,在代码前添加(#-- coding : utf-8--)这一句好像就可以了,测试小说txt是从网络下载(小说仅用于代码测试),通过复制粘贴让他的大小达到35.8MB。代码修改如下:
    参考链接:
    2021-07-13Python——报错 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xce in position 52: invali_WYDQXCG的博客-CSDN博客

    #-*- coding : utf-8-*-
    #多行文本组件的应用
    #https://blog.csdn.net/WYDQXCG/article/details/118709193
    
    import tkinter as tk
    from tkinter import filedialog
    from tkinter import messagebox
    import os
    mywindow = tk.Tk()
    mywindow.title('记事本')
    mywindow.geometry('400x300')
    filename = ''
     
    def openfile(): 
      global filename
      filename = filedialog.askopenfilename(defaultextension='.txt')
      if filename=='':
        filename=None
      else:
        mywindow.title(os.path.basename(filename))
        mytext.delete(1.0,tk.END)
        #f=open(filename,'r',encoding='UTF-8')
        f=open(filename,'r',encoding='UTF-8')
        mytext.insert(tk.INSERT,f.read())
        f.close()
     
    def savefile():
      global filename
      f=filedialog.asksaveasfilename(initialfile='未命名.txt',defaultextension='.txt')
      filename=f
      #fh=open(f,'w',encoding='UTF-8')
      fh=open(f,'w',encoding='UTF-8')
      msg=mytext.get(1.0,tk.END)
      fh.write(msg)
      fh.close()
      mywindow.title(os.path.basename(f))
     
    b_open=tk.Button(mywindow,text='打开',command=openfile)
    b_open.pack(side=tk.LEFT)
    b_save=tk.Button(mywindow,text='保存',command=savefile)
    b_save.pack()
    mytext=tk.Text(mywindow)
    mytext.pack()
    mywindow.mainloop()
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月20日
  • 已采纳回答 8月12日
  • 创建了问题 8月10日

悬赏问题

  • ¥60 Qcustomplot绘制实时动态曲线
  • ¥20 运用matlab画x-y图
  • ¥15 用idea运行项目,运行tomcat报错:断言失败
  • ¥15 Sqlserver查询链接服务器数据问题
  • ¥15 Bibtex4Word 引用中文文献
  • ¥20 用opencv c/c++ 转换成灰度图,然后做一下直方图均衡,输出mp4文件
  • ¥20 matlab中的双层数值积分
  • ¥50 服务器打印水晶报表问题
  • ¥30 gradle环境下javafx项目如何使用druid连接池
  • ¥15 服务器打印水晶报表问题