打开,编辑/重写字符串,保存回新文件或同一文件



我想打开一个文件,解码数据格式(从base64到ascii),重写或保存解码的字符串,返回到同一文件或新文件。p>我打开它,读取,解码(并作为测试打印)解码的base64字符串中可读格式(我相信ASCII)

我的目标是现在将此输出保存到:" newfile.txt"文档或返回原始" test.mcz"文件,准备我任务的下一步...

我知道有很棒的在线base64解码器,它们对我的工作确实很好 - 我经常使用它们,但我的目标是将自己的程序写作作为学习练习(也是我的互联网播放时)我需要一个离线程序)

这是我到目前为止的地方(原始文件是.mcz格式,这是一种游戏保存)

# PYTHON 3
import base64
f = open('test.mcz', 'r')
f_read = f.read()
# print(f_read) # was just as a test
new_f_read = base64.b64decode(f_read)
print (new_f_read)

这将打印出我需要的可读代码的对接,但是我不想将其从Python Shell复制并粘贴到另一个编辑器中,我想将其保存到文件中。..为了方便。

要么返回相同的test.mcz(无论如何,我将在以后再重新编码base64),或者是新文件 - 因此将我的原始内容视为原来。

问题出现在我想保存/编写这个解码的输出时,该输出存储在new_f_read变量中...这只是头痛由于某种原因,不得不将其切换到Python3(不要问...),我尝试了很多在线示例中的变体 - 我不知道从哪里开始解释到目前为止我尝试过什么。我不能将原始文件作为" r"one_answers" w"一起打开,所以我一旦打开并解码,我就无法将原始文件重新打开为" w",因为它只是清除了内容(无论如何仍然是编码) - p>我认为我需要写功能才能处理:1.打开,阅读,将字符串保存到变量2.操纵字符串 - 解码3.将新字符串写入新的或现有文件

听起来很容易我知道,但是我被卡住了...所以我在这里。如果有人显示示例,请花一些时间来解释正在发生的事情,对我来说,拥有我不理解的代码似乎毫无意义。很抱歉,如果这似乎是一件简单的事情,那么将不胜感激。谢谢

首先,您绝对可以打开一个用于阅读和写作的文件,而无需截断内容。这就是r+模式的目的(请参阅https://docs.python.org/3/library/functions.html#open)。如果执行此操作,则模型是(a)打开文件,(b)阅读,(c)以例如 f.seek(0),(d)写它。

其次,您可以简单地打开文件,读取该文件,然后关闭文件,然后重新打开,写入并再次将其关闭,例如:

# open the file for reading, read the data, then close the file
with open('test.mcz', 'rb') as f:
    f_read = f.read()
new_f_read = base64.b64decode(f_read)
# open the file for writing, write the data, then close the file
with open('test.mcz', 'wb') as f:
    f.write(new_f_read)

这可能是最简单的解决方案。

最简单的事情是首先打开一个读取文件句柄,将其关闭,然后打开写句柄。读/写把手很复杂,因为它们必须具有指向您所处文件中位置的指针,并且添加了您不需要使用的开销。如果您愿意,可以做到这一点,但是在这里浪费时间。

建议使用与操作员打开文件,因为当您离开块时,文件将自动关闭。

import base64
with open('test.mcz', 'r') as f:
    encode = base64.b64decode(f.read())
with open('test.mcz', 'wb') as f:
    f.write(encode)

这与

相同

导入base64

f = open('test.mcz', 'r'):
encode = base64.b64decode(f.read()) 
f.close()
f = open('test.mcz', 'wb'):
f.write(encode)
f.close()

最新更新