un liner pour supprimer les lignes vides d'un fichier en python?
Je suis à la recherche d'un liner qui va supprimer toutes les lignes vides d'un fichier en python.
python équivalent pour --> grep -v '^$' file_name > file_name
Python n'est généralement pas la suite de one-liners, mais un programme court devrait être possible.
Pourquoi l'exigence pour un one-liner?
Pourquoi l'exigence pour un one-liner?
grep .
est plus courteOriginalL'auteur Mandar Pande | 2011-07-19
Vous devez vous connecter pour publier un commentaire.
Si l'écriture d'un autre fichier est une exigence, vous pouvez utiliser
file_object.writelines(lines)
avec l'ouverture de fichier pour l'écriture.with
plus sûr?Évolution de la compréhension d'une boucle ne change rien, mais en changeant de
with
à une ligne ouverte() serait plus enclin à l'erreur je pense. Pourquoi être dans un one-liner change quelque chose?IIRC, le point de l'ensemble de
with
dans le contexte d'un fichier est de s'assurer que le fichier est fermé. Puisque tous les fichiers sont fermés en cas de résiliation, lewith
ne fait aucune différence ici.DeSimone, vous avez raison, je vous remercie, la modification de la réponse.
bool(line.rsplit())
n'est pas équivalent à une négation de^$
match.bool(line[:-1])
est.OriginalL'auteur utdemir
Suivants n'est pas un one-liner, mais fait le travail et est facile à lire:
Ceci affiche le résultat sur la sortie standard. Il est trivial de modifier ce code pour imprimer ailleurs.
Si vous insistez, il est assez facile de le convertir en un one-liner:
<>
est laid. 😛Pas une seule ligne, et, pour citer le Python docs, "!= peut également être écrit <>, mais c'est obsolète l'utilisation conservé pour la compatibilité ascendante. Le nouveau code devrait toujours utiliser !=.".
Comment faites-vous pour gérer de commentaire sur les anciennes versions de la réponse? Est-ce un problème de réplication, de la sorte? J'ai enlevé le
<>
tout à fait un certain temps avant que vous avez posté ce commentaire.Elle me bat. Aussi, même
!=
est inutile dans ce cas comme une chaîne vide est évaluée à faux, et pourquoi ne pas utiliserwith
si vous êtes en train de faire un multi-liner?OriginalL'auteur NPE
Un loopless:
OriginalL'auteur dugres
filter(bool, map(lambda x:x.rstrip(), open(filename)))
str.rstrip
comme une clé au lieu de créer une fonction lambda.C'est sympa, mais il n'est pas un équivalent car il n'a pas de fermer le fichier, ne préservent pas les espaces dans les lignes non-vides et ne pas écrire la sortie dans un fichier résultant.
OriginalL'auteur Daniel Kluev
Si vous avez besoin d'un véritable one-liner:
qui peut être utilisé dans votre shell:
OriginalL'auteur eumiro
Si vous voulez traiter de gros fichiers sans vous soucier de la capacité de mémoire des erreurs, vous devez le faire dans une boucle:
Si doit avoir un one-liner, voici le même code sur une seule ligne:
ÉDITÉ inclure agf soupçon.
for Null in (sys.stdout.write(line) for line in sys.stdin if line.strip()): pass
vous n'êtes pas de sauver laNone
s (sauf un, de toute façon)Merci pour l'astuce. J'ai oublié que vous n'avez pas à mettre un saut de ligne après la virgule. J'ai modifié mon exemple. BTW
line.strip()
serait ignorer non des lignes vides avec des espaces.Je sais, mais ils avaient mis en place ma définition de "vide".
"[.........] " au lieu de "pour _ (.........): pass"
que serait une accumulation potentiellement longue liste de Nvos (voir agf premier commentaire de l'édition et de l'histoire de ma réponse).
OriginalL'auteur DzinX
Je ne sais pas si c'est inutile. L'OP n'explique pas pourquoi il a besoin de ce one-liner. Il ressemble à une bonne réponse pour moi. Il ne fonctionne pas sur windows.
Lisez la question python équivalent pour -->
grep -v '^$' file_name > file_name
il ne veut pas exécuter grep sinon il aurait suffit d'utiliser la ligne de commande, le système d'exploitation.système est la PIRE façon d'exécuter des commandes shell et ses pas de la croix platormOriginalL'auteur Tugrul Ates
La fileinput module a la 'place' option pour le but exprès de l'édition de fichiers en une seule étape. Alors que le fichier est en cours de lecture, la sortie standard est temporairement redirigé vers le fichier d'entrée.
Voici un one-liner qui va faire ce que vous voulez (fait en bash):
OriginalL'auteur Droj