Donc, ce que je veux faire, c'est écrire un binaire .exe dans un fichier .txt, puis écrire le fichier .txt dans un binaire .exe, j'ai essayé ceci:

with open("old_File.exe", "rb") as f:
    text_file = open("File.txt", "w")
    byte = f.read(1)
    while byte != "":
        text_file.write(str(byte))
        byte = f.read(1)
text_file.close()

with open("New_File.exe", "wb") as f:
    text_file = open("File.txt", "r")
    byte = text_file.read(12)
    while byte != "":
        print byte
        f.write(byte)
        byte = text_file.read(12)
text_file.close()
f.close()

Mais si j'exécute les fenêtres New_File.exe me dit que ce n'est pas une application valide. Qu'est-ce que je fais mal?

-1
Richard Paul Astley 12 juil. 2015 à 03:53

3 réponses

Meilleure réponse

J'ai moi-même trouvé la réponse:

exe = open("exe.exe", "rb")
txt = open("txt.txt", "wb")
data = exe.read(100000)
while data != "":
    txt.write(data)
    data = exe.read(100000)
exe.close()
txt.close()

Vous devez en fait écrire le binaire sur le fichier texte au lieu de l'écrire sous forme de chaîne sur le fichier lui-même.

    #create new file
N_exe = open("N-exe.exe", "w+")
N_exe.close()


N_exe = open("N-exe.exe", "wb")
Txt = open("txt.txt", "rb")

data = Txt.read(100000)
while data != "":
    N_exe.write(data)
    data = Txt.read(100000)

N_exe.close()
Txt.close()
0
Richard Paul Astley 12 juil. 2015 à 02:56

Pour copier deux fichiers et conserver les métadonnées, utilisez shutil.copy2. Il s'agit d'un moyen beaucoup plus sûr de copier des fichiers.

1
Michael Aaron Safyan 12 juil. 2015 à 01:18

La réponse est:

La deuxième fois que vous lisiez le fichier * .txt, vous ne l'avez pas ouvert en mode lecture binaire, juste en lecture, qui est en fait, en mode texte. Avec les anciennes versions de Python, cela dépendait de la plate-forme, c'est-à-dire que ce sera un problème uniquement sous Windows. En Python 3, cela vous posera un problème sur n'importe quelle plate-forme.

Conseil: ne lisez pas un fichier en si petits morceaux si vous n'y êtes pas obligé, vous étranglerez les pauvres Windows. Faites-le avec au moins 1024. C'est souvent fait avec 4096 octets. Si le fichier est petit, faites simplement newfile.write (oldfile.read ()) Les PC d'aujourd'hui ont assez de RAM pour y mettre quelques Mo sans aucun problème. Et, il n'y a pas besoin de str (octet) car c'est déjà une chaîne.

2
Dalen 12 juil. 2015 à 02:48