打开,edit/rewrite 字符串,保存回新的或相同的文件
Opening, edit/rewrite string, save back to a new or same file
我想打开一个文件,解码数据格式(从 base64 到 ASCII),重写或保存解码后的字符串,或者返回到同一个文件,或者新文件。
我用它打开、读取、解码(并作为测试打印)解码的 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),要么回到一个新文件——这样我的原始文件就保持原样。
当我想 save/write 存储在 new_f_read 变量中的解码输出时,问题就出现了……这真是令人头疼,在我开始之前我可以想象它是如何需要的写的,当我出于某种原因不得不将它全部切换到 Python3 时我被绊倒了(不要问......)我已经尝试了很多在线示例的变体 - 我不知道在哪里开始解释我到目前为止所做的尝试。我无法同时打开原始文件 "r" 和 "w" 所以一旦我打开并解码我就无法重新打开原始文件 "w" 因为它只是擦除内容(仍然是无论如何编码) -
我想我需要编写函数来处理:
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)
这可能是最简单的解决方案。
最简单的方法是先打开一个读文件句柄,关闭它然后打开一个写句柄。 Read/Write 句柄很复杂,因为它们必须有一个指针指向您在文件中的位置,并且它会增加您不需要使用的开销。如果你愿意,你可以这样做,但在这里浪费时间。
建议使用 with 运算符打开文件,因为当您离开 with 块时文件会自动关闭。
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()
我想打开一个文件,解码数据格式(从 base64 到 ASCII),重写或保存解码后的字符串,或者返回到同一个文件,或者新文件。
我用它打开、读取、解码(并作为测试打印)解码的 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),要么回到一个新文件——这样我的原始文件就保持原样。
当我想 save/write 存储在 new_f_read 变量中的解码输出时,问题就出现了……这真是令人头疼,在我开始之前我可以想象它是如何需要的写的,当我出于某种原因不得不将它全部切换到 Python3 时我被绊倒了(不要问......)我已经尝试了很多在线示例的变体 - 我不知道在哪里开始解释我到目前为止所做的尝试。我无法同时打开原始文件 "r" 和 "w" 所以一旦我打开并解码我就无法重新打开原始文件 "w" 因为它只是擦除内容(仍然是无论如何编码) -
我想我需要编写函数来处理: 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)
这可能是最简单的解决方案。
最简单的方法是先打开一个读文件句柄,关闭它然后打开一个写句柄。 Read/Write 句柄很复杂,因为它们必须有一个指针指向您在文件中的位置,并且它会增加您不需要使用的开销。如果你愿意,你可以这样做,但在这里浪费时间。
建议使用 with 运算符打开文件,因为当您离开 with 块时文件会自动关闭。
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()