从以前的执行中清除 txt 文件的内容
Posted
技术标签:
【中文标题】从以前的执行中清除 txt 文件的内容【英文标题】:Clean content of txt file from previous executions 【发布时间】:2020-08-07 20:33:01 【问题描述】:我有一个执行计算并在 python 控制台中显示它们的程序,查看了一些文档,我已经能够将控制台的结果存储到 txt 文件中。
我现在要找的是每次重新运行txt文件都会被清理,这样控制台之前的结果就不会累积在txt中了。
from loggerPrint import Logger
print_console = Logger('out_of_console.txt')
print('This is an example:')
print('Element',5*' ', 'Value')
values = [1,2,3,4,5,6,7,8,9,10]
for i in values:
print(i,11*' ', values[5])
print_console.close()
班级
import sys, os
class Logger(object):
"""
Lumberjack class - duplicates sys.stdout to a log file and it's okay
source: https://***.com/a/24583265/5820024
"""
def __init__(self, filename="Prints_k", mode="ab", buff=0):
self.stdout = sys.stdout
self.file = open(filename, mode, buff)
sys.stdout = self
def __del__(self):
self.close()
def __enter__(self):
pass
def __exit__(self, *args):
pass
def write(self, message):
self.stdout.write(message)
self.file.write(message.encode("utf-8"))
def flush(self):
self.stdout.flush()
self.file.flush()
os.fsync(self.file.fileno())
def close(self):
if self.stdout != None:
sys.stdout = self.stdout
self.stdout = None
if self.file != None:
self.file.close()
self.file = None
在搜索时,我找到了类 'Logger',在我的情况下,如果在 write 方法中定义变量如下:self.file.write (message.encode ("utf-8")),我在以下链接中留下了更多文档:How to print the console to a text file AFTER the program finishes (Python)?
如果有人在处理类方面有经验并且理解得更好,我将不胜感激,您可以包含一个名为 clear 的新方法,或者以其他方式进行。
最好的问候。
【问题讨论】:
【参考方案1】:找到那门课做得很好!你可以看到当你实例化它时
print_console = Logger('out_of_console.txt')
参数mode
保持其默认值"ab"
。
参考:https://stackabuse.com/file-handling-in-python/ 这对应于以“附加字节”模式打开文件,在您写入时将新输入添加到文件中。你需要写
print_console = Logger('out_of_console.txt',mode="wb")
为了在写入之前清除文件。
【讨论】:
非常感谢您的贡献,诚挚的问候@ju95ju。【参考方案2】:Logger
类中的__init__
方法以'ab'
模式打开文件。 a
= 追加b
= 二进制
如果您想始终写入新文件而不保留旧内容,请以'wb'
模式打开文件。
def __init__(self, filename="Prints_k", mode="wb", buff=0):
https://docs.python.org/3.3/tutorial/inputoutput.html#reading-and-writing-files
【讨论】:
非常感谢您的贡献和文档,诚挚的问候,@Piyush C。以上是关于从以前的执行中清除 txt 文件的内容的主要内容,如果未能解决你的问题,请参考以下文章