Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Damien Wyart
je cherche à lire un fichier à l'envers. Pour des fichiers textes, je peux faire: #!/usr/bin/python
import sys Data = sys.stdin.readlines() Data.reverse() for line in Data: print line
et ensuite un simple: cat file | ./reverse.py me renverse mon fichier $ cat test abc 123 def 456
$ cat test | ./rev.py 456
def
123
abc
J'ai deux questions: -pourquoi ai-je un retour à la ligne en trop?
print ajoute une fin de ligne après ce qu'il a affiché, et readline n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu enlèves les 'n' dans les chaînes de la liste retournée par readlines (avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
-comment faire la même chose pour un fichier binaire et non texte?
import sys
Data = sys.stdin.read() Data = Data[::-1] sys.stdout.write(Data)
Ca lit le fichier en mémoire. Pour de gros fichier, il vaut mieux faire une boucle ; pour cela plusieurs approches sont possibles, voir par exemple : http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
-- DW
je cherche à lire un fichier à l'envers. Pour des fichiers textes,
je peux faire:
#!/usr/bin/python
import sys
Data = sys.stdin.readlines()
Data.reverse()
for line in Data:
print line
et ensuite un simple:
cat file | ./reverse.py
me renverse mon fichier
$ cat test
abc
123
def
456
$ cat test | ./rev.py
456
def
123
abc
J'ai deux questions:
-pourquoi ai-je un retour à la ligne en trop?
print ajoute une fin de ligne après ce qu'il a affiché, et readline
n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu
enlèves les 'n' dans les chaînes de la liste retournée par readlines
(avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour
à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
-comment faire la même chose pour un fichier binaire et non texte?
import sys
Data = sys.stdin.read()
Data = Data[::-1]
sys.stdout.write(Data)
Ca lit le fichier en mémoire. Pour de gros fichier, il vaut mieux faire
une boucle ; pour cela plusieurs approches sont possibles, voir par
exemple : http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
je cherche à lire un fichier à l'envers. Pour des fichiers textes, je peux faire: #!/usr/bin/python
import sys Data = sys.stdin.readlines() Data.reverse() for line in Data: print line
et ensuite un simple: cat file | ./reverse.py me renverse mon fichier $ cat test abc 123 def 456
$ cat test | ./rev.py 456
def
123
abc
J'ai deux questions: -pourquoi ai-je un retour à la ligne en trop?
print ajoute une fin de ligne après ce qu'il a affiché, et readline n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu enlèves les 'n' dans les chaînes de la liste retournée par readlines (avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
-comment faire la même chose pour un fichier binaire et non texte?
import sys
Data = sys.stdin.read() Data = Data[::-1] sys.stdout.write(Data)
Ca lit le fichier en mémoire. Pour de gros fichier, il vaut mieux faire une boucle ; pour cela plusieurs approches sont possibles, voir par exemple : http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
-- DW
Damien Wyart
print ajoute une fin de ligne après ce qu'il a affiché, et readline n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu enlèves les 'n' dans les chaînes de la liste retournée par readlines (avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
Je n'y ai plus pensé hier, mais tu peux aussi utiliser stdout.write à la place de print pour un contrôle plus précis des fin de lignes.
-- DW
print ajoute une fin de ligne après ce qu'il a affiché, et readline
n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu
enlèves les 'n' dans les chaînes de la liste retournée par readlines
(avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour
à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
Je n'y ai plus pensé hier, mais tu peux aussi utiliser stdout.write à la
place de print pour un contrôle plus précis des fin de lignes.
print ajoute une fin de ligne après ce qu'il a affiché, et readline n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu enlèves les 'n' dans les chaînes de la liste retournée par readlines (avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
Je n'y ai plus pensé hier, mais tu peux aussi utiliser stdout.write à la place de print pour un contrôle plus précis des fin de lignes.
-- DW
Nicolas
Le 08/11/2011 15:06, Kevin Denis a écrit :
Bonjour,
je cherche à lire un fichier à l'envers. Pour des fichiers textes, je peux faire: #!/usr/bin/python
import sys
Data = sys.stdin.readlines() Data.reverse() for line in Data: print line
et ensuite un simple: cat file | ./reverse.py me renverse mon fichier $ cat test abc 123 def 456
$ cat test | ./rev.py 456
def
123
abc
J'ai deux questions: -pourquoi ai-je un retour à la ligne en trop? -comment faire la même chose pour un fichier binaire et non texte?
Merci
Dans ton exemple, tu ne lis pas le fichier à l'envers. Tu le lis dans le bon ordre et tu affiches les lignes à l'envers.
Cette méthode n'a pas de sens pour un fichier binaire (il n'y a pas de lignes).
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire. Tu ne peux donc pas essayer en mode interactif.
f = open("mon_fichier", "rb")
Nicolas
Le 08/11/2011 15:06, Kevin Denis a écrit :
Bonjour,
je cherche à lire un fichier à l'envers. Pour des fichiers textes,
je peux faire:
#!/usr/bin/python
import sys
Data = sys.stdin.readlines()
Data.reverse()
for line in Data:
print line
et ensuite un simple:
cat file | ./reverse.py
me renverse mon fichier
$ cat test
abc
123
def
456
$ cat test | ./rev.py
456
def
123
abc
J'ai deux questions:
-pourquoi ai-je un retour à la ligne en trop?
-comment faire la même chose pour un fichier binaire et non texte?
Merci
Dans ton exemple, tu ne lis pas le fichier à l'envers.
Tu le lis dans le bon ordre et tu affiches les lignes à l'envers.
Cette méthode n'a pas de sens pour un fichier binaire (il n'y a pas de
lignes).
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le
fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire. Tu
ne peux donc pas essayer en mode interactif.
je cherche à lire un fichier à l'envers. Pour des fichiers textes, je peux faire: #!/usr/bin/python
import sys
Data = sys.stdin.readlines() Data.reverse() for line in Data: print line
et ensuite un simple: cat file | ./reverse.py me renverse mon fichier $ cat test abc 123 def 456
$ cat test | ./rev.py 456
def
123
abc
J'ai deux questions: -pourquoi ai-je un retour à la ligne en trop? -comment faire la même chose pour un fichier binaire et non texte?
Merci
Dans ton exemple, tu ne lis pas le fichier à l'envers. Tu le lis dans le bon ordre et tu affiches les lignes à l'envers.
Cette méthode n'a pas de sens pour un fichier binaire (il n'y a pas de lignes).
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire. Tu ne peux donc pas essayer en mode interactif.
f = open("mon_fichier", "rb")
Nicolas
Kevin Denis
Le 08-11-2011, Damien Wyart a écrit :
je cherche à lire un fichier à l'envers. Pour des fichiers textes, je peux faire: #!/usr/bin/python
import sys Data = sys.stdin.readlines() Data.reverse() for line in Data: print line
et ensuite un simple: cat file | ./reverse.py me renverse mon fichier $ cat test abc 123 def 456
$ cat test | ./rev.py 456
def
123
abc
J'ai deux questions: -pourquoi ai-je un retour à la ligne en trop?
print ajoute une fin de ligne après ce qu'il a affiché, et readline n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu enlèves les 'n' dans les chaînes de la liste retournée par readlines (avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
Nickel, merci.
-comment faire la même chose pour un fichier binaire et non texte?
import sys
Data = sys.stdin.read() Data = Data[::-1] sys.stdout.write(Data)
Ca lit le fichier en mémoire. Pour de gros fichier, il vaut mieux faire une boucle ; pour cela plusieurs approches sont possibles, voir par exemple :r http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
Parfait. Là, ça me renverse bien tout le fichier. Merci -- Kevin
Le 08-11-2011, Damien Wyart <damien.wyart@free.fr> a écrit :
je cherche à lire un fichier à l'envers. Pour des fichiers textes,
je peux faire:
#!/usr/bin/python
import sys
Data = sys.stdin.readlines()
Data.reverse()
for line in Data:
print line
et ensuite un simple:
cat file | ./reverse.py
me renverse mon fichier
$ cat test
abc
123
def
456
$ cat test | ./rev.py
456
def
123
abc
J'ai deux questions:
-pourquoi ai-je un retour à la ligne en trop?
print ajoute une fin de ligne après ce qu'il a affiché, et readline
n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu
enlèves les 'n' dans les chaînes de la liste retournée par readlines
(avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour
à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
Nickel, merci.
-comment faire la même chose pour un fichier binaire et non texte?
import sys
Data = sys.stdin.read()
Data = Data[::-1]
sys.stdout.write(Data)
Ca lit le fichier en mémoire. Pour de gros fichier, il vaut mieux faire
une boucle ; pour cela plusieurs approches sont possibles, voir par
exemple :r
http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
Parfait. Là, ça me renverse bien tout le fichier.
Merci
--
Kevin
je cherche à lire un fichier à l'envers. Pour des fichiers textes, je peux faire: #!/usr/bin/python
import sys Data = sys.stdin.readlines() Data.reverse() for line in Data: print line
et ensuite un simple: cat file | ./reverse.py me renverse mon fichier $ cat test abc 123 def 456
$ cat test | ./rev.py 456
def
123
abc
J'ai deux questions: -pourquoi ai-je un retour à la ligne en trop?
print ajoute une fin de ligne après ce qu'il a affiché, et readline n'enlève pas la fin de ligne lors de sa lecture des lignes. Donc soit tu enlèves les 'n' dans les chaînes de la liste retournée par readlines (avec du rstrip('n')), soit tu dis à print de ne pas ajouter de retour à la ligne, en mettant une virgule à la fin de l'instruction :
print line,
Nickel, merci.
-comment faire la même chose pour un fichier binaire et non texte?
import sys
Data = sys.stdin.read() Data = Data[::-1] sys.stdout.write(Data)
Ca lit le fichier en mémoire. Pour de gros fichier, il vaut mieux faire une boucle ; pour cela plusieurs approches sont possibles, voir par exemple :r http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
Parfait. Là, ça me renverse bien tout le fichier. Merci -- Kevin
Damien Wyart
* Nicolas in fr.comp.lang.python:
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire.
Sous Linux, les modes textes et binaires sont équivalents (donc je n'ai pas tenu compte de ceci dans ma réponse). Par contre sous Windows, il y a bien une différence.
Sinon, il est toujours possible de réouvrir stdin en mode binaire :
* Nicolas <nicolasp@aaton.com> in fr.comp.lang.python:
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le
fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire.
Sous Linux, les modes textes et binaires sont équivalents (donc je n'ai
pas tenu compte de ceci dans ma réponse). Par contre sous Windows, il
y a bien une différence.
Sinon, il est toujours possible de réouvrir stdin en mode binaire :
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire.
Sous Linux, les modes textes et binaires sont équivalents (donc je n'ai pas tenu compte de ceci dans ma réponse). Par contre sous Windows, il y a bien une différence.
Sinon, il est toujours possible de réouvrir stdin en mode binaire :
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire.
Sous Linux, les modes textes et binaires sont équivalents (donc je n'ai pas tenu compte de ceci dans ma réponse). Par contre sous Windows, il y a bien une différence.
Il est préférable de prendre l'habitude de préciser le mode binaire. D'autant plus qu'en Python3 il faut le préciser, quel que soit l'OS.
Sinon, il est toujours possible de réouvrir stdin en mode binaire :
Ce genre d’acrobatie est à utiliser avec des pincettes.
Le 09/11/2011 10:55, Damien Wyart a écrit :
* Nicolas<nicolasp@aaton.com> in fr.comp.lang.python:
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le
fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire.
Sous Linux, les modes textes et binaires sont équivalents (donc je n'ai
pas tenu compte de ceci dans ma réponse). Par contre sous Windows, il
y a bien une différence.
Il est préférable de prendre l'habitude de préciser le mode binaire.
D'autant plus qu'en Python3 il faut le préciser, quel que soit l'OS.
Sinon, il est toujours possible de réouvrir stdin en mode binaire :
Pour lire un fichier binaire à l'envers, il faut commencer à ouvrir le fichier en mode binaire. sys.stdin n'est pas ouvert en mode binaire.
Sous Linux, les modes textes et binaires sont équivalents (donc je n'ai pas tenu compte de ceci dans ma réponse). Par contre sous Windows, il y a bien une différence.
Il est préférable de prendre l'habitude de préciser le mode binaire. D'autant plus qu'en Python3 il faut le préciser, quel que soit l'OS.
Sinon, il est toujours possible de réouvrir stdin en mode binaire :