Bonjour,
Je voudrais savoir si il est possible d'avoir l'équivalent de:
en Python ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2#!/bin/sed -f /^$/d
merci
Bonjour,
Je voudrais savoir si il est possible d'avoir l'équivalent de:
en Python ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2#!/bin/sed -f /^$/d
merci
Salut,
Oui mais, il va falloir écrire nombre de lignes de code ne serait-ce que pour récupérer le nom des fichiers d'entrée et de sortie, les ouvrir, lire ligne à ligne, tester si elle est vide ou pas, l'écrire,...
C'est ce qui fait la différence entre un langage de programmation plutôt généraliste (comme Python) et un outil très spécialisé comme sed.
- W
D'accord, je me suis penché dessus ces derniers jours, sans résultat.
merci
j'ai essayé plusieurs choses mais l'idée principale du script est là:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 # -*- coding:utf-8 -*- import sys, re del sys.argv[0]; i = 0 while i < len(sys.argv): entrer = open(sys.argv[i], "r"); lignes = entrer.read(); entrer.close() for j in lignes: if re.search("^$", j): del j sortir = open(sys.argv[i], "w"); sortir.write(lignes); sortir.close(); i += 1
Salut,
Vous essayez de faire bien trop de choses à la fois!
Travaillez sur un seul fichier, puis vous fabriquez une fonction qui pourra être (éventuellement) appliquée à une liste de (nom de) fichiers.
Quand vous écrivez: "lignes = entrer.read()", vous récupérez tout le contenu et non une liste de chaînes de caractères.
problème: une chaine de caractère est itérable comme une liste. mais "for j in ..." ne va pas mettre dans "j" ce que vous attendez (une ligne) mais un caractère.
Pas besoin de re: si la ligne est vide sa longueur sera nulle (ou égale à 1 si vous y avez inclus les fins de lignes).
La première chose à faire est de créer un ficher test.txt contenant des lignes vides.
puis vous lancer la console Python, et vous regardez comment parcourir votre fichier ligne à ligne
avec les fins de lignes:
sans les fins de lignes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >>> f = open('test.txt') >>> for line in f: print(line)
puis vous sautez les lignes vides, puis vous écrivez dans le fichier de sortie...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >>> lines = open('test.txt').read().splitlines() >>> for line in lines: print(line)
- W
j'ai trouvé une solution plus simple qui ne nécessite pas de programmer.
il suffit d'utiliser vim et de faire:
q # commencer l'enregistrement d'une macro
a # registre de la macro
/^$ # recherche ligne vide
dd #suppression de ligne
q # finir l'enregistrement de la macro
1000@a #1000 répétitions de la macro
comme j'utilise vim tous les jours, je me dis que ça serait plus simple .
salut,
à se demander ce que tu fabriques sur un forum de programmeurs en fait
d'accord avec Wiztricks, la solution avec sed est bien plus efficace, déjà tu n'es pas obligé de créer un script sed, tu peux en une seule ligne faire un truc du genre
ensuite pour ce qui est de vim ta solution n'est pas très fiable, que se passe-t-il si tu as plus de 1000 substitutions à effectuer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part sed -i '/^$/d' fichier
c'est plus simple et plus efficace de faire
quant à la Python (puisqu'on est sur le forum concerné quand même), une possibilité parmi d'autres est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part :1,$g/^$/d
programmer c'est bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >>> with open('bla', 'r') as f, open('bla2', 'w') as f2: ... f2.write(''.join([ligne for ligne in f.readlines() if ligne != '\n']))
merci beaucoup
Il faut dire aussi que je ne savais plus trop comment faire.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager