当前位置: 首页 > 知识库问答 >
问题:

在Python3中,如何将输出保存到从中获取数据的同一个文件中

党建义
2023-03-14

我试图打开一个文件,删除一些字符(在dic中定义),然后将其保存到相同的文件。我可以打印输出,它看起来很好,但是我不能将它保存到原始文本加载的同一个文件中。

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showerror
import sys
import fileinput

dic = {'/':' ', '{3}':''};


def replace_all(text, dic):
    for i, j in dic.items():
        text = text.replace(i, j)
    return text

class MyFrame(Frame):
    def __init__(self):
        Frame.__init__(self)
        self.master.title("Example")
        self.master.rowconfigure(5, weight=1)
        self.master.columnconfigure(5, weight=1)
        self.grid(sticky=W+E+N+S)

        self.button = Button(self, text="Browse", command=self.load_file, width=10)
        self.button.grid(row=1, column=0, sticky=W)

    def load_file(self):
        fname = askopenfilename(filetypes=(("Napisy", "*.txt"),
                                           ("All files", "*.*") ))
        if fname:
            try:
                with open (fname, 'r+') as myfile: #here
                    data = myfile.read()           #here
                    data2 = replace_all(data, dic) #here
                    print(data2)                   #here
                    data.write(data2)              #and here should it happen

            except:
                showerror("Open Source File", "Failed to read file\n'%s'" % fname)
            return


if __name__ == "__main__":
    MyFrame().mainloop()

我已经尝试了几个命令,但要么我收到python错误或它根本不工作。

共有2个答案

靳彦
2023-03-14

字符串没有。写方法。以下应该可以(我试过了):替换

data.write(data2)              #and here should it happen

具有

myfile.seek(0)
myfile.truncate()
myfile.write(data2)

如果data2比data短,则需要truncate()调用,否则,data的尾部将留在文件中。

段渊
2023-03-14

这通常是通过写入临时文件,然后将其移动到原始文件名来实现的。

 类似资料:
  • 问题内容: 我该怎么写 归档? 我想将此内容包含在excel文件的工作表中,我在其中写入了using 。 根据文档(pandas.DataFrame.info),它返回一个 buf:可写缓冲区,默认为sys.stdout 问题答案: 我会尝试以下方法:

  • vim 怎么输出两个文件的不同之处呢? 用 vimdiff 可以看两个文件的不同之处,那怎么输出不同的分地方并吧保存为另一个文件呢?

  • 问题内容: 如何将URL输出的JSON保存到文件中? 例如,来自Twitter搜索API(此http://search.twitter.com/search.json?q=hi) 语言并不重要。 编辑//然后如何将进一步的更新附加到EOF? 编辑2 //确实,答案很好,但是我接受了我认为最优雅的答案。 问题答案: 这在任何语言中都很容易,但是机制各不相同。使用wget和shell: 追加: 使用P

  • 问题内容: 我尝试使用,但它并没有涉及整个结构和层次结构。 另一方面这样做,但我无法保存。 在输出中,我可以将所有子项一个一个地展开,然后选择并复制/粘贴,但是结构非常重要。 问题答案: 更新: 您现在可以右键单击 在“控制台”面板中右键单击>另存为,将记录的消息保存到文件中。 原始答案: 您可以使用下面显示的devtools片段创建console.save方法。它从输入中创建一个FileBlob

  • 问题内容: 我正在尝试将数据快速保存到plist文件中,但是读取plist时保存的数据没有显示出来。这是我正在使用的代码。 编辑:我听说做到这一点的最佳方法是写入documents目录,所以我的问题是我应该如何写入该目录中的文件? 问题答案: 显然该文件不在可写位置,因此我在documents目录中创建了该文件。 然后,必须从文档目录中读取它。