|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour, Ja voudrais savoir si un fichier donné est écrit en ascii ou en binaire. Comment faire cela ? Merci d'avance. -- http://scipy.org/FredericPetit |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> > Bonjour, > > Ja voudrais savoir si un fichier donné est écrit en ascii ou en binaire. > > Comment faire cela ? > > Merci d'avance. > > -- > http://scipy.org/FredericPetit analyser son contenu. hg |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> > Bonjour, > > Ja voudrais savoir si un fichier donné est écrit en ascii ou en binaire. > > Comment faire cela ? > > Merci d'avance. > > -- > http://scipy.org/FredericPetit analyser son contenu. hg |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
hg <hg@nospam.org> a écrit :
> analyser son contenu. Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). Me goure-je ? -- http://scipy.org/FredericPetit |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
hg <hg@nospam.org> a écrit :
> analyser son contenu. Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). Me goure-je ? -- http://scipy.org/FredericPetit |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
fred a écrit :
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? Pour analyser le contenu, le mieux est de commencer à l'ouvrir en binaire... après, faudrais savoir si c'est n'importe quel fichier [aye, voir la commande file sous Linux], ou bien si tu as une liste bornée (et pas trop délirante) de formats attendus... |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
fred a écrit :
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? Pour analyser le contenu, le mieux est de commencer à l'ouvrir en binaire... après, faudrais savoir si c'est n'importe quel fichier [aye, voir la commande file sous Linux], ou bien si tu as une liste bornée (et pas trop délirante) de formats attendus... |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
On Tue, 07 Aug 2007 16:31:44 +0200, fred <fredantispam@free.fr> wrote:
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? Le seul intérêt de ce mode est que sous Windows, le caractère CR ajouté au LF pour chaque fin de ligne est automatiquement ignoré. Ce comportement "magique" étant fréquemment une source d'emmm... pas possible (ceux qui ont essayé de faire des tell et des seek sur les fichiers texte sous Windows ne me diront pas le contraire...), il est très souvent conseillé d'ouvrir systématiquement les fichiers en mode binaire et de virer soi-même le CR à la main au besoin. Quand on écrit, cela n'a de plus en général aucune importance: même si on ne met qu'un LF à la fin de chaque ligne d'un fichier texte, la plupart des éditeurs sauront quand même l'ouvrir sans problème, à l'exception notable - et probablement unique - du Bloc-notes de Windows. La réponse à ta question initiale est donc: on s'en fout; on ouvre en binaire et c'est tout... HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])" |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
On Tue, 07 Aug 2007 16:31:44 +0200, fred <fredantispam@free.fr> wrote:
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? Le seul intérêt de ce mode est que sous Windows, le caractère CR ajouté au LF pour chaque fin de ligne est automatiquement ignoré. Ce comportement "magique" étant fréquemment une source d'emmm... pas possible (ceux qui ont essayé de faire des tell et des seek sur les fichiers texte sous Windows ne me diront pas le contraire...), il est très souvent conseillé d'ouvrir systématiquement les fichiers en mode binaire et de virer soi-même le CR à la main au besoin. Quand on écrit, cela n'a de plus en général aucune importance: même si on ne met qu'un LF à la fin de chaque ligne d'un fichier texte, la plupart des éditeurs sauront quand même l'ouvrir sans problème, à l'exception notable - et probablement unique - du Bloc-notes de Windows. La réponse à ta question initiale est donc: on s'en fout; on ouvre en binaire et c'est tout... HTH -- python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])" |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
Eric Brunel a écrit :
> On Tue, 07 Aug 2007 16:31:44 +0200, fred <fredantispam@free.fr> wrote: > >> hg <hg@nospam.org> a écrit : >> >>> analyser son contenu. >> Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, >> il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). >> Me goure-je ? > > Le seul intérêt de ce mode est que sous Windows, le caractère CR ajouté > au LF pour chaque fin de ligne est automatiquement ignoré. Ce > comportement "magique" étant fréquemment une source d'emmm... pas > possible (ceux qui ont essayé de faire des tell et des seek sur les > fichiers texte sous Windows ne me diront pas le contraire...), il est > très souvent conseillé d'ouvrir systématiquement les fichiers en mode > binaire et de virer soi-même le CR à la main au besoin. Quand on écrit, > cela n'a de plus en général aucune importance: même si on ne met qu'un > LF à la fin de chaque ligne d'un fichier texte, la plupart des éditeurs > sauront quand même l'ouvrir sans problème, à l'exception notable - et > probablement unique - du Bloc-notes de Windows. > > La réponse à ta question initiale est donc: on s'en fout; on ouvre en > binaire et c'est tout... Ou, si c'est un fichier texte, ouvre le en mode "Universel" et laisse Python se débrouiller avec les retours à la ligne Mac/Win/Unix... |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
Eric Brunel a écrit :
> On Tue, 07 Aug 2007 16:31:44 +0200, fred <fredantispam@free.fr> wrote: > >> hg <hg@nospam.org> a écrit : >> >>> analyser son contenu. >> Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, >> il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). >> Me goure-je ? > > Le seul intérêt de ce mode est que sous Windows, le caractère CR ajouté > au LF pour chaque fin de ligne est automatiquement ignoré. Ce > comportement "magique" étant fréquemment une source d'emmm... pas > possible (ceux qui ont essayé de faire des tell et des seek sur les > fichiers texte sous Windows ne me diront pas le contraire...), il est > très souvent conseillé d'ouvrir systématiquement les fichiers en mode > binaire et de virer soi-même le CR à la main au besoin. Quand on écrit, > cela n'a de plus en général aucune importance: même si on ne met qu'un > LF à la fin de chaque ligne d'un fichier texte, la plupart des éditeurs > sauront quand même l'ouvrir sans problème, à l'exception notable - et > probablement unique - du Bloc-notes de Windows. > > La réponse à ta question initiale est donc: on s'en fout; on ouvre en > binaire et c'est tout... Ou, si c'est un fichier texte, ouvre le en mode "Universel" et laisse Python se débrouiller avec les retours à la ligne Mac/Win/Unix... |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? > Il est tout a fait possible d'ouvrir un fichier ascii en binaire (cas 0) et un fichier binaire en ascci (cas 1). Dans le cas 0, on va pouvoir lire bit à bit des octets de caractères ascii (cf. tables de conversion quelconque). Dans le cas 1, on obtiendra une suite de caractère bizarres (pour avoir un exemple rapide il suffit de faire: cat mon_fichier_binaire dans un terminal). il n'existe pas à ma connaissance de méthode absolue pour identifier la binarité (ou la asciification tant qu'on y est) d'un fichier hormis l'analyse globale du contenu. Cependant il est souvent de mise de lire les premiers octets du fichier et de vérifier leur strict appartenance au subset ascii. Une autre méthode (sous *nix) est de faire appel à l'utilitaire "file" qui vérifie les premiers "magic bits" d'un fichier censés décrire son contenu ... je ne sais pas si un module python reprend les fonctionnalités de file ... Bonne continuation Ju -- The real problem is not whether machines think, but whether men do. - B.F. Skinner |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? > Il est tout a fait possible d'ouvrir un fichier ascii en binaire (cas 0) et un fichier binaire en ascci (cas 1). Dans le cas 0, on va pouvoir lire bit à bit des octets de caractères ascii (cf. tables de conversion quelconque). Dans le cas 1, on obtiendra une suite de caractère bizarres (pour avoir un exemple rapide il suffit de faire: cat mon_fichier_binaire dans un terminal). il n'existe pas à ma connaissance de méthode absolue pour identifier la binarité (ou la asciification tant qu'on y est) d'un fichier hormis l'analyse globale du contenu. Cependant il est souvent de mise de lire les premiers octets du fichier et de vérifier leur strict appartenance au subset ascii. Une autre méthode (sous *nix) est de faire appel à l'utilitaire "file" qui vérifie les premiers "magic bits" d'un fichier censés décrire son contenu ... je ne sais pas si un module python reprend les fonctionnalités de file ... Bonne continuation Ju -- The real problem is not whether machines think, but whether men do. - B.F. Skinner |
|
|
|
#14 |
|
Messages: n/a
Hébergeur: |
Avell Diroll wrote:
> Une autre méthode (sous *nix) est de faire appel à l'utilitaire "file" > qui vérifie les premiers "magic bits" d'un fichier censés décrire son > contenu ... je ne sais pas si un module python reprend les > fonctionnalités de file ... http://packages.debian.org/unstable/python/python-magic http://www.darwinsys.com/file/ Et même une implémentation en pur python ..? http://www.demonseed.net/~jp/code/magic.py .... Ju -- I never let my schooling interfere with my education. - Mark Twain |
|
|
|
#15 |
|
Messages: n/a
Hébergeur: |
Avell Diroll wrote:
> Une autre méthode (sous *nix) est de faire appel à l'utilitaire "file" > qui vérifie les premiers "magic bits" d'un fichier censés décrire son > contenu ... je ne sais pas si un module python reprend les > fonctionnalités de file ... http://packages.debian.org/unstable/python/python-magic http://www.darwinsys.com/file/ Et même une implémentation en pur python ..? http://www.demonseed.net/~jp/code/magic.py .... Ju -- I never let my schooling interfere with my education. - Mark Twain |
|
|
|
#16 |
|
Messages: n/a
Hébergeur: |
Bonsoir !
> savoir si un fichier donné est écrit en ascii ou en > binaire C'est quoi un fichier en ascii ? Vu que, dans la codification ASCII, il y a des caractères comme 9 [TAB], 13 [CARRIAGE-RETURN], 27 [ESCAPE] Et que, avec les ASCII-étendus, on utilise les 256 octets possibles. Comment distingue-t'on du binaire relativement à de l'ASCII étendu ? (par exemple, le Latin-1) Conclusion : comme cela t'a été suggéré, ouvrir en binaire règle le problème. @+ MCI |
|
|
|
#17 |
|
Messages: n/a
Hébergeur: |
Bonsoir !
> savoir si un fichier donné est écrit en ascii ou en > binaire C'est quoi un fichier en ascii ? Vu que, dans la codification ASCII, il y a des caractères comme 9 [TAB], 13 [CARRIAGE-RETURN], 27 [ESCAPE] Et que, avec les ASCII-étendus, on utilise les 256 octets possibles. Comment distingue-t'on du binaire relativement à de l'ASCII étendu ? (par exemple, le Latin-1) Conclusion : comme cela t'a été suggéré, ouvrir en binaire règle le problème. @+ MCI |
|
|
|
#18 |
|
Messages: n/a
Hébergeur: |
fred a écrit :
> Bonjour, > > Ja voudrais savoir si un fichier donné est écrit en ascii ou en binaire. > > Comment faire cela ? > > Merci d'avance. > Fais une copie en lisant le contenu en mode ascii et compare les deux fichiers ![]() |
|
|
|
#19 |
|
Messages: n/a
Hébergeur: |
fred a écrit :
> Bonjour, > > Ja voudrais savoir si un fichier donné est écrit en ascii ou en binaire. > > Comment faire cela ? > > Merci d'avance. > Fais une copie en lisant le contenu en mode ascii et compare les deux fichiers ![]() |
|
|
|
#20 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? > > -- > http://scipy.org/FredericPetit Non: Pars du principe que c'est du binaire (donc ouvre en binaire) ... puis change d'avis si besoin est. hg |
|
|
|
#21 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> hg <hg@nospam.org> a écrit : > >> analyser son contenu. > Sauf que pour ouvrir un fichier, avant de faire quoique ce soit, > il faut spécifier si c'est un fichier binaire ou pas (paramètre 'b'). > Me goure-je ? > > -- > http://scipy.org/FredericPetit Non: Pars du principe que c'est du binaire (donc ouvre en binaire) ... puis change d'avis si besoin est. hg |
|
|
|
#22 |
|
Messages: n/a
Hébergeur: |
hg <hg@nospam.org> a écrit :
> Non: Pars du principe que c'est du binaire (donc ouvre en binaire) ... puis > change d'avis si besoin est. Bon, je fais une réponse groupée, hein, m'en voulez pas. Il était une fois un fichier de paramètres qui contenait le type de données à lire dans un fichier : ascii, binaire, et pour le binaire, le format, int, float, double, plus tout un tas de choses follement amusantes, j'en passe et des meilleurs. Or il arrive que l'utilisateur (moi en l'occurence) à force de modifs à droite par-ci, à gauche par-là, en arrive à se mélanger les doigts, et que même s'il est précisé ascii dans le sus-dit fichier de paramètres, et bien c'est en fait un fichier binaire qui passait par là qui est lu. Ou l'inverse. Donc plus loin dans le code, badaboum, patatra, ça râle, toussa. Les fichiers en question sont des tableaux lus : - par readlines() quand c'est de l'ascii ; - par fread() de scipy.io.numpyio quand c'est du binaire (parce que c'est ici qu'on m'a dit de l'utiliser et que j'en suis très content, na). Donc l'ouvrir tout le temps en binaire, admettons. Mais ça ne résout guère le problème. L'appel de readlines() ou fread() est fonction de ce que l'utilisateur a bien gentiment tapé dans son fichier de paramètres, mais point du type réel du fichier en question. Donc à ce stade, je vois deux solutions : - soit me tenter des try/except sur fread ou readlines, et encore, je ne suis pas sûr que le résultat soit probant ; disons que j'aimerais bien qu'il me donne la réponse avant qu'il se soit tapé tout le fichier, parce qu'il peut être gros, le bougre. - soit utiliser un file() pythonné, ce qui me plaît mieux. Ceci dit, en posant ma question, je pensais trouver une fonction native toute faite pour ce genre de chose. C'est la raison pour. Merci à tous. J'investiguerai demain. -- http://scipy.org/FredericPetit |
|
|
|
#23 |
|
Messages: n/a
Hébergeur: |
hg <hg@nospam.org> a écrit :
> Non: Pars du principe que c'est du binaire (donc ouvre en binaire) ... puis > change d'avis si besoin est. Bon, je fais une réponse groupée, hein, m'en voulez pas. Il était une fois un fichier de paramètres qui contenait le type de données à lire dans un fichier : ascii, binaire, et pour le binaire, le format, int, float, double, plus tout un tas de choses follement amusantes, j'en passe et des meilleurs. Or il arrive que l'utilisateur (moi en l'occurence) à force de modifs à droite par-ci, à gauche par-là, en arrive à se mélanger les doigts, et que même s'il est précisé ascii dans le sus-dit fichier de paramètres, et bien c'est en fait un fichier binaire qui passait par là qui est lu. Ou l'inverse. Donc plus loin dans le code, badaboum, patatra, ça râle, toussa. Les fichiers en question sont des tableaux lus : - par readlines() quand c'est de l'ascii ; - par fread() de scipy.io.numpyio quand c'est du binaire (parce que c'est ici qu'on m'a dit de l'utiliser et que j'en suis très content, na). Donc l'ouvrir tout le temps en binaire, admettons. Mais ça ne résout guère le problème. L'appel de readlines() ou fread() est fonction de ce que l'utilisateur a bien gentiment tapé dans son fichier de paramètres, mais point du type réel du fichier en question. Donc à ce stade, je vois deux solutions : - soit me tenter des try/except sur fread ou readlines, et encore, je ne suis pas sûr que le résultat soit probant ; disons que j'aimerais bien qu'il me donne la réponse avant qu'il se soit tapé tout le fichier, parce qu'il peut être gros, le bougre. - soit utiliser un file() pythonné, ce qui me plaît mieux. Ceci dit, en posant ma question, je pensais trouver une fonction native toute faite pour ce genre de chose. C'est la raison pour. Merci à tous. J'investiguerai demain. -- http://scipy.org/FredericPetit |
|
|
|
#24 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> hg <hg@nospam.org> a écrit : > >> Non: Pars du principe que c'est du binaire (donc ouvre en binaire) ... >> puis change d'avis si besoin est. > Bon, je fais une réponse groupée, hein, m'en voulez pas. > > Il était une fois un fichier de paramètres qui contenait le type de > données à lire dans un fichier : ascii, binaire, et pour le binaire, le > format, int, float, double, plus tout un tas de choses follement > amusantes, j'en passe et des meilleurs. > > Or il arrive que l'utilisateur (moi en l'occurence) à force de modifs à > droite par-ci, à gauche par-là, en arrive à se mélanger les doigts, > et que même s'il est précisé ascii dans le sus-dit fichier de paramètres, > et bien c'est en fait un fichier binaire qui passait par là qui est lu. > Ou l'inverse. > Donc plus loin dans le code, badaboum, patatra, ça râle, toussa. > > Les fichiers en question sont des tableaux lus : > > - par readlines() quand c'est de l'ascii ; > > - par fread() de scipy.io.numpyio quand c'est du binaire (parce que > c'est ici qu'on m'a dit de l'utiliser et que j'en suis très content, na). > > Donc l'ouvrir tout le temps en binaire, admettons. > > Mais ça ne résout guère le problème. > L'appel de readlines() ou fread() est fonction de ce que l'utilisateur > a bien gentiment tapé dans son fichier de paramètres, mais point du type > réel du fichier en question. > > Donc à ce stade, je vois deux solutions : > > - soit me tenter des try/except sur fread ou readlines, et encore, je ne > suis pas sûr que le résultat soit probant ; disons que j'aimerais bien > qu'il me donne la réponse avant qu'il se soit tapé tout le fichier, > parce qu'il peut être gros, le bougre. > > - soit utiliser un file() pythonné, ce qui me plaît mieux. > > Ceci dit, en posant ma question, je pensais trouver une fonction native > toute faite pour ce genre de chose. C'est la raison pour. > > Merci à tous. > > J'investiguerai demain. > > -- > http://scipy.org/FredericPetit Pas sûr de tout comprendre. Mes 2 centimes: 1) Tu gardes tes anciennes routines et ne touches pas leurs codes 2) Tu rajoutes une fonction que tu appelles d'abord (ex: def Is_Binary (file) ) qui te retourne oui ou non. Cette dernière ouvre le fichier en binaire et le "parse" pour tenter de deviner si le fichier est a passer côter binaire ou ascii ... puis le ferme. hg |
|
|
|
#25 |
|
Messages: n/a
Hébergeur: |
fred wrote:
> hg <hg@nospam.org> a écrit : > >> Non: Pars du principe que c'est du binaire (donc ouvre en binaire) ... >> puis change d'avis si besoin est. > Bon, je fais une réponse groupée, hein, m'en voulez pas. > > Il était une fois un fichier de paramètres qui contenait le type de > données à lire dans un fichier : ascii, binaire, et pour le binaire, le > format, int, float, double, plus tout un tas de choses follement > amusantes, j'en passe et des meilleurs. > > Or il arrive que l'utilisateur (moi en l'occurence) à force de modifs à > droite par-ci, à gauche par-là, en arrive à se mélanger les doigts, > et que même s'il est précisé ascii dans le sus-dit fichier de paramètres, > et bien c'est en fait un fichier binaire qui passait par là qui est lu. > Ou l'inverse. > Donc plus loin dans le code, badaboum, patatra, ça râle, toussa. > > Les fichiers en question sont des tableaux lus : > > - par readlines() quand c'est de l'ascii ; > > - par fread() de scipy.io.numpyio quand c'est du binaire (parce que > c'est ici qu'on m'a dit de l'utiliser et que j'en suis très content, na). > > Donc l'ouvrir tout le temps en binaire, admettons. > > Mais ça ne résout guère le problème. > L'appel de readlines() ou fread() est fonction de ce que l'utilisateur > a bien gentiment tapé dans son fichier de paramètres, mais point du type > réel du fichier en question. > > Donc à ce stade, je vois deux solutions : > > - soit me tenter des try/except sur fread ou readlines, et encore, je ne > suis pas sûr que le résultat soit probant ; disons que j'aimerais bien > qu'il me donne la réponse avant qu'il se soit tapé tout le fichier, > parce qu'il peut être gros, le bougre. > > - soit utiliser un file() pythonné, ce qui me plaît mieux. > > Ceci dit, en posant ma question, je pensais trouver une fonction native > toute faite pour ce genre de chose. C'est la raison pour. > > Merci à tous. > > J'investiguerai demain. > > -- > http://scipy.org/FredericPetit Pas sûr de tout comprendre. Mes 2 centimes: 1) Tu gardes tes anciennes routines et ne touches pas leurs codes 2) Tu rajoutes une fonction que tu appelles d'abord (ex: def Is_Binary (file) ) qui te retourne oui ou non. Cette dernière ouvre le fichier en binaire et le "parse" pour tenter de deviner si le fichier est a passer côter binaire ou ascii ... puis le ferme. hg |
|
![]() |
| Outils de la discussion | |
|
|