Je n'arrive pas a supprimer les espace et les saut de ligne (/n) [Résolu]

Signaler
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020
-
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020
-
Bonjour, j'ai fait un programme qui doit modifier un texte précis mais le problème je dois supprimer tout les espace et les lignes.


mais .replace ne fonctionne pas a cause de mon import OS.
Pouvez vous m'aider ? (ZRC a regarder)
"détails" = si demande de supprimer /n ou replace " " "" cela ne fonctionne pas.

import tkinter
from tkinter import *
from tkinter.filedialog import askopenfilename
import os

def sauvegarder():
        cherche_file = askopenfilename(initialdir=r"C:\Desktop", title="Ouvrir",
                                           filetypes=(("Text Files", "*.txt"),
                                                      ("Python Files", "*.py"),
                                                      ("all files", "*.*")))
        cherche_file = open(cherche_file, 'w')
        cherche_file.write(my_text.get(1.0, END))

def ZRC():
    mon_fichier = askopenfilename(initialdir=r"C:\Desktop", title="Ouvrir",
                                           filetypes=(("Text Files", "*.txt"),
                                                      ("Python Files", "*.py"),
                                                      ("all files", "*.*")))
    fi = open(mon_fichier, 'r')
    fo = open('tempo.txt','w')

    for lignes in fi:
        if('[ENTETE]' in lignes): lignes = lignes.replace('[ENTETE]', 'TI')
        if ("TYPE = LIVRAISON" in lignes): lignes = lignes.replace("TYPE = LIVRAISON", "Reception")
        if ("NO BDL =" in lignes): lignes = lignes.replace("NO BDL =", "Z")
        if ("DAT BDL" in lignes): lignes = lignes.replace("DAT BDL" , "ZRC")
        if("DAT LIV ="in lignes): lignes = lignes.replace("DAT LIV =", " ")
        if("[LIGNES]"in lignes): lignes = lignes.replace("[LIGNES]", "LI;ARTICLE")
        if("REF FOU"in lignes): lignes = lignes.replace("REF FOU", "BRA")
        if("QTE ="in lignes): lignes = lignes.replace("QTE =", " ")
        if("PA BRUT"in lignes): lignes = lignes.replace("PA BRUT", " ")
        if("REMISE"in lignes): lignes = lignes.replace("REMISE", " ")
        if("PV TTC"in lignes): lignes = lignes.replace("PV TTC", " ")
        if("TVA"in lignes): lignes = lignes.replace("TVA", " ")
        if("LIBELLE ="in lignes): lignes = lignes.replace("LIBELLE =", "A01D;")
        if("GENCOD = "in lignes): lignes = lignes.replace("GENCOD = ", "FAUX")
        print()
        fo.write(lignes)

    fi.close()
    fo.close()

    os.remove(mon_fichier)
    os.rename('tempo.txt', mon_fichier)
    file = open(mon_fichier, "r")
    lignes = file.readlines()
    lignes[2] = " "
    lignes[3] = " "
    lignes[6] = " "
    lignes[7] = " "
    lignes[8] = " "
    lignes[9] = " "
    lignes[10] = " "
    lignes[11] = " "
    lignes[12] = " "
    file = open(mon_fichier, "w")
    file.writelines(lignes)
    file.close()

window = tkinter.Tk()

window.title("Fred")
window.geometry("1080x720")
window.minsize(480, 360)
window.iconbitmap("fred.ico")
window.positionfrom("user")

label_welcome = tkinter.Label(window, text="Version 1.0", font=("Arial", 30))
label_welcome.pack()

#Exporter et importer

mainmenu = tkinter.Menu(window)

first_menu = tkinter.Menu(mainmenu, tearoff=0)
first_menu.add_command(label='Importer', command=cherche)

my_text = Text(window, width=40, height=30, font=("Helvetica", 16))
my_text.pack(pady=20)

first_menu.add_command(label='Sauvegarder', command=sauvegarder)
first_menu.add_command(label="Quitter", command=window.quit)

second_menu = tkinter.Menu(mainmenu, tearoff= 0)
second_menu.add_command(label="Information", command=show_about)
second_menu.add_command(label="Help", command=show_about1)

tree_menu = tkinter.Menu(mainmenu, tearoff=0)
tree_menu.add_command(label="ZRC", command=ZRC)

mainmenu.add_cascade(label="Fichier", menu=first_menu)
mainmenu.add_cascade(label="Autre", menu=second_menu)
mainmenu.add_cascade(label="Exporter", menu=tree_menu)
window.config(menu=mainmenu)

window.mainloop()

9 réponses

Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
Bonjour mister,

Il semble que tu n'as pas utilisé les balises de code Python pour afficher ton code

mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :

def test():
    print('test')

test()


Tu as un message d'erreur ?
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

Oui si je rajoute la commande replace
AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94 >
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

tu as lu mon message de 10h17?

j'ai testé juste la partie de code ou tu fait
lignes = f.readlines()
lignes[2] = " "

ca me suprimme la 3eme ligne et ca ajoute un espace à la place
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020
>
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021

Oui et c'est pour but de supprimé la ligne 3

car la ligne 1 est égal a [0] et oui j'ai lu ton message et j'ai reposter si dessous le codage python avec la couleur.
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

import tkinter
from tkinter import *
from tkinter.filedialog import askopenfilename
import os






def sauvegarder():
cherche_file = askopenfilename(initialdir=r"C:\Desktop", title="Ouvrir",
filetypes=(("Text Files", "*.txt"),
("Python Files", "*.py"),
("all files", "*.*")))
cherche_file = open(cherche_file, 'w')
cherche_file.write(my_text.get(1.0, END))

def ZRC():
mon_fichier = askopenfilename(initialdir=r"C:\Desktop", title="Ouvrir",
filetypes=(("Text Files", "*.txt"),
("Python Files", "*.py"),
("all files", "*.*")))
fi = open(mon_fichier, 'r')
fo = open('tempo.txt','w')

for lignes in fi:
if('[ENTETE]' in lignes): lignes = lignes.replace('[ENTETE]', 'TI')
if ("TYPE = LIVRAISON" in lignes): lignes = lignes.replace("TYPE = LIVRAISON", "Reception")
if ("NO BDL =" in lignes): lignes = lignes.replace("NO BDL =", "Z")
if ("DAT BDL" in lignes): lignes = lignes.replace("DAT BDL" , "ZRC")
if("DAT LIV ="in lignes): lignes = lignes.replace("DAT LIV =", " ")
if("[LIGNES]"in lignes): lignes = lignes.replace("[LIGNES]", "LI;ARTICLE")
if("REF FOU"in lignes): lignes = lignes.replace("REF FOU", "BRA")
if("QTE ="in lignes): lignes = lignes.replace("QTE =", " ")
if("PA BRUT"in lignes): lignes = lignes.replace("PA BRUT", " ")
if("REMISE"in lignes): lignes = lignes.replace("REMISE", " ")
if("PV TTC"in lignes): lignes = lignes.replace("PV TTC", " ")
if("TVA"in lignes): lignes = lignes.replace("TVA", " ")
if("LIBELLE ="in lignes): lignes = lignes.replace("LIBELLE =", "A01D;")
if("GENCOD = "in lignes): lignes = lignes.replace("GENCOD = ", "FAUX")
print()
fo.write(lignes)

fi.close()
fo.close()

os.remove(mon_fichier)
os.rename('tempo.txt', mon_fichier)
file = open(mon_fichier, "r")
lignes = file.readlines()
lignes[2] = " "
lignes[3] = " "
lignes[6] = " "
lignes[7] = " "
lignes[8] = " "
lignes[9] = " "
lignes[10] = " "
lignes[11] = " "
lignes[12] = " "
file = open(mon_fichier, "w")
file.writelines(lignes)
file.close()

window = tkinter.Tk()

window.title("Fred")
window.geometry("1080x720")
window.minsize(480, 360)
window.iconbitmap("fred.ico")
window.positionfrom("user")

label_welcome = tkinter.Label(window, text="Version 1.0", font=("Arial", 30))
label_welcome.pack()

#Exporter et importer

mainmenu = tkinter.Menu(window)

first_menu = tkinter.Menu(mainmenu, tearoff=0)
first_menu.add_command(label='Importer', command=cherche)

my_text = Text(window, width=40, height=30, font=("Helvetica", 16))
my_text.pack(pady=20)

first_menu.add_command(label='Sauvegarder', command=sauvegarder)
first_menu.add_command(label="Quitter", command=window.quit)

second_menu = tkinter.Menu(mainmenu, tearoff= 0)
second_menu.add_command(label="Information", command=show_about)
second_menu.add_command(label="Help", command=show_about1)

tree_menu = tkinter.Menu(mainmenu, tearoff=0)
tree_menu.add_command(label="ZRC", command=ZRC)

mainmenu.add_cascade(label="Fichier", menu=first_menu)
mainmenu.add_cascade(label="Autre", menu=second_menu)
mainmenu.add_cascade(label="Exporter", menu=tree_menu)
window.config(menu=mainmenu)

window.mainloop()
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
Ca ressemble à : Commande .replace + supprimer une ligne ne fonctionne pas

C'est bien mais il n'y a plus les indentations

Dans ZRC, tu ouvres mon_fichier, tu lis toutes les lignes, tu modifie, tu réouvre mon_fichier en

écriture sans l'avoir fermé, bizarre

A quel endroit supprimes-tu les \n ?
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

A tout les lignes je veut les supprimer comme les espace exemple :

entete
5454
blabla kgkerndngv

Je veut que sa devient sa :

entete5454blablakgkerndngb
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
tu as lu mon dernier message de 10h17 ou pas ?
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

oui désolé pour l'attente je regarde d'autre forum pour essayer de trouver la réponse
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
C'est marrant, dans ton autre appel Commande .replace + supprimer une ligne ne

fonctionne pas
je t'avais expliqué comment supprimer proprement des lignes, avec la

méthode du fichier temporaire (comme tu le fait déjà juste au dessus avec tes replace)

tu as reposté le code avec les couleurs mais il n'y a plus les indentations ...

Sinon, pour supprimer des saut de lignes, je ne le vois pas dans ton code, peux-tu montrer ca

que tu fais ?

Si tu regarde sur un autre forum, préviens nous, que l'on ne perde plus de temps ici
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

Merci de votre réponse rapide j'ai rajouter ce cis dans mon ZRC

if(" "in lignes): lignes = lignes.replace(" ", "")
if("\n"in lignes): lignes = lignes.replace("\n", "")


Merci de pas être agressif s'il vous plait j'ai le droit de regarder des codes sur d'autre forum ce qui me permet m’améliore surtout je code mais je fait aussi des chose personnelle a coter mais bref...

Quand je rajoute cette ligne cela me crée pleins de problème dans mon texte cela annule pratiquement toute mes modification et ne supprime pas les espace ni les ligne sans explication.

J'ai essaye .replace mais cela ne fonctionne pas
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

Si je n'est pas pris votre code par rapport a supprimer des lignes c'est tout simplement car j'y arrivais pas a l'utiliser et que ma méthode fonctionnait et que je la préférait mais actuellement je veut pas supprimes des lignes mais les espace pour regrouper tout les mot sur une ou plusieurs lignes
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
je ne suis pas agressif, je te dis ça pour ne pas que l'on perde notre temps le uns et les autres

:-) :-)

Tu es d'accord avec moi que dans un simple fichier ascii les lignes se terminent par un

caractère de saut de ligne, le fameux \n

Exemple:

la ligne 1 du fichier\n
la ligne 2 du fichier\n
etc .........

donc il suffit, après avoir lu une ligne, de supprimer le dernier caractère

exemple:
f = open(un_fichier,'r')
for ligne in f:
    ligne = ligne[:-1]  #on prend ligne du début jusqu'à un caractère en moins à partir de la fin
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

Votre code ne fonctionne pas personnellement ^^".

surtout que je comprend que la vous souhaiter retirer la ligne 2 ... se n'est pas se que je cherche je cherche a supprimer les espace et les saut de ligne. je vais vous donner mon texte que je dois convertir ^^ je dois les mettre tous sur une ligne ^^ ( sa sera plus simple)

[ENTETE]
TYPE = LIVRAISON
CL CDE = 13915
CL LIV = 13915
NO BDL = 1488116
DAT BDL = 31082020
EMAIL = edi@rochetgroup.fr
NO CDE = SW_025
DEVISE = EUR
QTE TOT = 000006
PA TOT = 000000051.08
NBLIG = 006
CONTRM = 
DAT LIV = 31082020
[LIGNE]
REF FOU = 5020413
QTE = 001
PA BRUT = 0010.4
REMISE = 0002.6
PA NET = 007.80
PV TTC = 000024
TVA = 20
LIBELLE = Buffle BUFFALO Beige 14/12mm Mat
GENCOD = 3601510149332
[LIGNE]
REF FOU = 5190402
QTE = 001
PA BRUT = 0010.4
REMISE = 0002.6
PA NET = 007.80
PV TTC = 000024
TVA = 20
LIBELLE = Veau Grain Alligator YAOUNDE Blanc 14/12mm Brillant
GENCOD = 3601510068886
[LIGNE]
REF FOU = 5411606ST
QTE = 001
PA BRUT = 0010.4
REMISE = 0002.6
PA NET = 007.80
PV TTC = 000024
TVA = 20
LIBELLE = Vachette MIAMI Marine 16/14mm Mat
GENCOD = 3601510275789
[LIGNE]
REF FOU = 3011612XS
QTE = 001
PA BRUT = 0012.6
REMISE = 003.15
PA NET = 009.45
PV TTC = 000029
TVA = 20
LIBELLE = Vachette NEW YORK Bleu 16/14mm Mat
GENCOD = 3601510240725
[LIGNE]
REF FOU = 3011605XS
QTE = 001
PA BRUT = 0012.6
REMISE = 003.15
PA NET = 009.45
PV TTC = 000029
TVA = 20
LIBELLE = Vachette NEW YORK Rouge 16/14mm Mat
GENCOD = 3601510240695
[LIGNE]
REF FOU = 7230661
QTE = 001
PA BRUT = 0011.7
REMISE = 002.92
PA NET = 008.78
PV TTC = 000027
TVA = 20
LIBELLE = Veau NEPTUNE Noir 18/16mm Mat Etanche
GENCOD = 3601510206950
[FIN]
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
Votre code ne fonctionne pas personnellement ^^".

Bien sur, tel quel ce n'est pas suffisant, il manque des choses, je voulais juste te montrer comment on supprime le dernier caractère d'une ligne lue dans un fichier

Chez moi, ça fonctionne car je fais comme pour le remplacement de texte

ouverture mon_fichier en lecture
ouverture temp.txt en écriture
lecture d'une ligne, suppression du dernier caractère (ligne = ligne[:-1]), donc du \n
supression des espaces (" ")
écriture de la ligne (donc sans le \n et sans espaces) dans temp.txt
fermeture des 2 fichiers et renommage de temp.txt

mon fichier de test est comme ceci avant traitement:
ligne 1
ligne 2
ligne3


et après traitement, il est comme ceci:
ligne1ligne2ligne3

C'est bien ce que l'on veut, non ?

surtout que je comprend que la vous souhaiter retirer la ligne 2

Quelle ligne 2 ?
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

Es ce que vous pouvez me montrer votre code alors au complet car actuellement vous me mettez l'amoitié et je vais pas vous mentir je suis complètement perdue de se que vous essayer de me faire

Ligne 2 je parlais de sa : ligne = ligne[:-1] je croyais que vous essaye de m'expliquer de supprimé cette ligne mais na juste un manque de compréhension
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
C'est bien parce que c'est toi :-)
def supprimer_sauts_lignes_et_espaces():
    ''' Supprime les sauts de lignes et les espaces '''

    global mon_fichier

    fi = open(mon_fichier, 'r')
    fo = open('tempo.txt','w')

    for ligne in fi:
        ligne = ligne[:-1]
        ligne = ligne.replace(' ','')
        fo.write(ligne)

    fi.close()
    fo.close()

    os.remove(mon_fichier)
    os.rename('tempo.txt', mon_fichier)

supprimer_sauts_lignes_et_espaces()
Messages postés
846
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
14 janvier 2021
94
Bonjour mister,

Alors as-tu de la réussite ?
Messages postés
40
Date d'inscription
jeudi 19 novembre 2020
Statut
Membre
Dernière intervention
4 décembre 2020

Bonjour, merci pour votre codage oui après plusieurs réflexion et essaye avec votre codage cela fonctionne parfaitement je vous remercie.