0
votes

Fichier binaire divisé en deux fichiers

Je ne suis pas très familier avec Python, mais je devais écrire un script pour avoir franchi un binaire dans deux autres fichiers. Le premier fichier doit prendre chaque 1er octet et deuxième fichier devrait prendre tous les 2e octets. J'ai écrit le script suivant, mais tous les fichiers de sortie sont des zéros.
Pouvez-vous s'il vous plaît aider? XXX


0 commentaires

3 Réponses :


2
votes

beaucoup plus simple xxx


2 commentaires

Le octets () est assez superflu ...


Peut-être que je les a copypassé de la question



1
votes

Le moyen le plus efficace de la mémoire consiste à lire l'octet de fichier d'entrée par octet et à écrire cet octet sur les autres fichiers à tour: xxx pré>

Ceci stocke seulement deux octets en mémoire à la fois, par rapport à votre lecture de l'ensemble du fichier en mémoire. Vous pouvez lire des morceaux plus gros à la fois (dire, 1024 code> ou 1024 * 1024 code>) et les distribuer aux deux fichiers de là, en fonction de votre compromis préféré entre la CPU / Optimisation IO et mémoire: P>

with open(sys.argv[1], 'rb') as yuv, \
        open('uv_buffer', 'wb') as uv, open('y_buffer', 'wb') as y:
    while True:
        b = yuv.read(1024)
        if not b:
            break
        uv.write(b[::2])
        y.write(b[1::2])


2 commentaires

c'est trop lentement. Pour les fichiers volumineux, vous pouvez le lire par des blocs de plusieurs mégaoctets, puis utilisez la tranche d'une autre solution.


Ouais, c'est vrai, chaque opération de lecture individuelle a probablement trop de frais généraux. C'est la mémoire la plus de façon efficace que je devrais dire. Où est exactement le meilleur compromis entre la mémoire et l'efficacité de la CPU OP doit comprendre eux-mêmes.



0
votes

Le problème où vous allez vous tromper est que les octets (n) construisent un objet d'octet de taille n (avec toutes les valeurs définies sur 0x00). Je changerais cela de: xxx

à: xxx

mais comme les autres l'ont dit, votre implémentation n'est pas la meilleure façon de faire cette. Python a beaucoup de fonctionnalités pour aider à une telle manipulation de chaîne et de données.


0 commentaires