我一直在编写一个读取文件的程序,并在再次编写之前更改特定字符。当我在OSX下运行程序时,输出完全符合我的要求。但是,当尝试在Windows下运行它时,写入的文件会在文件中散布许多非预期的字符。如果我在编写之前检查Python输出的长度,那就是预期的大小,所以我假设某些东西与Windows上的Python编写协议不同。如果您有兴趣,可以使用以下代码片段。
rom = open(rom_name, 'rb').read()
rom_list = list(rom)
for item in ability_locations:
address = int(item, 16)
rand_ind = random.randint(0,len(ability_values) - 1)
new_enemy = ability_values[rand_ind]
new_enemy = chr(int(new_enemy,16))
rom_list[address] = new_enemy
rom = "".join(rom_list)
new_rom = open(rom_name.split(".")[0] + "_" + str(KA_seed) + ".nes", 'w')
new_rom.write(rom)
new_rom.close()
值得注意的是,我正在尝试修改hex文件,因此很多字符都是“不寻常的”。我不知道写这些字符是否有问题。
我很感激你能给我的任何帮助。谢谢!
编辑:对于具有相同问题的未来人,以二进制模式编写修复了我的问题('wb'而不是'w')。
答案 0 :(得分:2)
在文本模式下写入时,Windows会插入carrage-return字符。以二进制模式"wb"
:
with open(rom_name, 'rb') as rom:
rom = rom.read()
rom_list = list(rom)
for item in ability_locations:
address = int(item, 16)
new_enemy = random.choice(ability_values)
rom_list[address] = chr(int(new_enemy, 16))
with open('{}_{}.new'.format(rom_name.split(".")[0], KA_seed), 'wb') as new_rom:
new_rom.write("".join(rom_list))