web-dev-qa-db-fra.com

Quelle est la différence entre les modes rb et r + b dans les objets de fichier

J'utilise le module pickle dans Python et j'essaie différents fichiers IO modes:

# works on windows.. "rb"
with open(pickle_f, 'rb') as fhand:
        obj = pickle.load(fhand)

# works on linux.. "r"
with open(pickle_f, 'r') as fhand:
        obj = pickle.load(fhand)

# works on both "r+b"
with open(pickle_f, 'r+b') as fhand:
        obj = pickle.load(fhand)

Je n'ai jamais lu quelque chose sur le mode "r + b", mais je l'ai trouvé mentionné dans la documentation .

Je reçois EOFError sous Linux si j'utilise "rb" mode et sous Windows si "r" est utilisé. Je viens de donner "r+b" _ mode un coup et ça marche sur les deux.

Qu'est-ce que "r+b" mode? Quelle est la différence entre "rb" et "r + b"? Pourquoi ça marche quand les autres pas?

39
Iamcool

r+ est utilisé pour la lecture et l’écriture. b est pour binaire. r+b mode ouvre le fichier binaire en lecture ou en écriture.
Vous pouvez en lire plus ici .

61
karthikr

r s'ouvre pour la lecture, alors que r+ s'ouvre pour la lecture et l'écriture. Le b est pour binaire.

Ceci est précisé dans le documentation :

Les valeurs de mode les plus couramment utilisées sont 'r' a lire, 'w' pour écrire (tronquer le fichier s'il existe déjà), et 'a' pour l'ajout (ce qui sur certains systèmes Unix signifie que toutes les écritures sont ajoutées à la fin du fichier, quelle que soit la position de recherche actuelle). Si mode est omis, la valeur par défaut est 'r'. La valeur par défaut consiste à utiliser le mode texte, qui peut convertir '\n' caractères avec une représentation spécifique à la plate-forme en écriture et en lecture. Ainsi, lors de l’ouverture d’un fichier binaire, vous devez ajouter 'b' à la valeur de mode pour ouvrir le fichier en mode binaire, ce qui améliorera la portabilité. (Ajout de 'b' est utile même sur les systèmes qui ne traitent pas les fichiers binaires et les fichiers texte différemment, où il sert de documentation.) Voir ci-dessous pour plus de valeurs possibles de mode.

Modes 'r+', 'w+' et 'a+' ouvre le fichier pour la mise à jour (notez que 'w+' tronque le fichier). Ajouter 'b' au mode permettant d'ouvrir le fichier en mode binaire, sur des systèmes différenciant les fichiers binaires et les fichiers texte; sur les systèmes ne disposant pas de cette distinction, en ajoutant le 'b' n'a aucun effet.

19
NPE

Je crois comprendre que l’ajout de r+ ouvre en lecture et en écriture (comme w+, bien que, comme indiqué dans le commentaire, tronque le fichier). Le b l'ouvre simplement en mode binaire, ce qui est supposé être moins conscient des choses comme les séparateurs de lignes (au moins en C++).

6
Dan Lecocq

Sous Windows, "b" ajouté au mode ouvre le fichier en mode binaire. Il existe donc des modes tels que "rb", "wb" et "r + b". Python sur Windows distingue les fichiers texte des fichiers binaires; les caractères de fin de ligne des fichiers texte sont automatiquement légèrement modifiés lors de la lecture ou de l'écriture des données. Cette modification en arrière-plan de la les données de fichier conviennent pour les fichiers texte ASCII, mais cela corrompra les données binaires comme dans les fichiers JPEG ou EXE. Faites très attention à utiliser le mode binaire lors de la lecture et de l'écriture de tels fichiers. Sous Unix, ajouter un 'b' au mode ne fait pas de mal, vous pouvez donc l'utiliser indépendamment de la plateforme pour tous les fichiers binaires.

Source: lecture et écriture de fichiers

2
Chankey Pathak