Python 2.7 - 在Win7和OSX上写入文件时的差异

时间:2017-05-25 17:12:05

标签: python windows macos python-2.7

我一直在编写一个读取文件的程序,并在再次编写之前更改特定字符。当我在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')。

1 个答案:

答案 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))