Récupérer les données d'un fichier txt après l'input

Fermé
LALO_5656 Messages postés 29 Date d'inscription mardi 8 novembre 2022 Statut Membre Dernière intervention 21 septembre 2024 - 19 mai 2023 à 21:20
 Utilisateur anonyme - 22 mai 2023 à 11:29

Bonjour, à tous je veux récupérer les données dans un fichier txt à partir d'un input pour les utilisés ensuite.

Je m'explique, je voudrais récupérer les valeurs de coordonnées x et y de mon fichier txt avec la fonction input

mon fichier suivant le lien: https://drive.google.com/file/d/1-hAsughOfG8juqCgvii8PzTDayFR3xe4/view?usp=sharing

D'avance merci!

voila mon code 

import matplotlib.pyplot
import csv


def equdroite(x0, y0, x1, y1):
    a = y1 - y0
    b = x0 - x1
    c = -(b * y0 + a * x0)
    #     print("verif00:",sign(x0,y0,a,b,c),sign(x1,y1,a,b,c))
    return a, b, c


def inside(Poly, p):
    for P in Poly:
        a, b, c, s, x, y = P[0], P[1], P[2], P[3], pp[0], pp[1]
        if s * sign(x, y, a, b, c) < 0:
            #             print("outside:",a,b,c,s,x,y)
            return False
    return True


def sign(x, y, a, b, c):
    return a * x + b * y + c


# Les 4 coordonnées sources

from tkinter import filedialog


def prompt_filename():
    return filedialog.askopenfilename(
        initialdir="/", title="Sélectionner le fichier source",
        filetypes=(
            ("Fichier texte", "*.txt"),
            ("Fichier csv", "*.csv")
        )
    )


def read_coords(f_coordsource):
    coordsource = list()
    for line in f_coordsource:
        print(line.strip())
        # ...
    return coordsource


filename_coords = prompt_filename()
with open(filename_coords, "r") as f_coords:
    (x, y) = coords = read_coords(f_coords)

...

# x = 325010, 325015, 325015, 325010
# y = 2077560, 2077560, 2077555, 2077555
# L'emprise du projet
A = [324989.345, 324987.133, 324987.502, 325037.452, 325035.977, 324989.345]
B = [2077586.246, 2077553.622, 2077537.955, 2077537.402, 2077589.933, 2077586.246]
# A = [324989.345,  324987.133,  324980,  325037.452,  325035.977,  324989.345]
# B = [2077586.246, 2077553.622, 2077800, 2077537.402, 2077589.933, 2077586.246]
# avgA,avgB=sum(A)/len(A),sum(B)/len(B)
# # print ("avg:",avgA,avgB)
# A=[x-avgA for x in A]
# B=[x-avgB for x in B]
# x=[x-avgA for x in x]
# y=[x-avgB for x in y]
sg = 5
nc = len(A) - 1
E = []
for p0 in range(nc):
    p1 = (p0 + 1) % nc
    p2 = (p0 + int(nc / 2)) % nc
    a, b, c = equdroite(A[p0], B[p0], A[p1], B[p1])
    s = sign(A[p2], B[p2], a, b, c)
    #     print("inloop:",p0,a,b,c,s)
    E.append([a, b, c, s, p0, p1])
# print("E:",E)
for p in range(nc):
    for C in E:
        if p != C[4] and p != C[5]:
            a, b, c, s, xp, yp = C[0], C[1], C[2], C[3], A[p], B[p]
            v = sign(xp, yp, a, b, c)
            if s * v < 0:
                #             print("outside:",a,b,c,s,xp,yp)
                print("OUPS!", s, v)
matplotlib.pyplot.plot(A, B)
matplotlib.pyplot.scatter(x, y, color="r")
matplotlib.pyplot.axis("equal")
matplotlib.pyplot.grid()

phg = (int(min(A) / sg) * sg, int(min(B) / sg) * sg)
pbd = (int(max(A) / sg + 1) * sg, int(max(B) / sg + 1) * sg)
nrow = int((pbd[0] - phg[0]) / sg) + 1
ncol = int((pbd[1] - phg[1]) / sg) + 1
# print(phg)
# print(nrow,ncol)
prouge = []
for row in range(nrow):
    for col in range(ncol):
        pp = (phg[0] + sg * row, phg[1] + sg * col)
        if inside(E, pp):
            prouge.append(pp)
xrouge = [ppp[0] for ppp in prouge]
yrouge = [ppp[1] for ppp in prouge]
matplotlib.pyplot.scatter(xrouge, yrouge, color="g")
matplotlib.pyplot.scatter(x, y, color="r")
data = A, B
with open('coordout.csv', 'a', newline="") as f:
    writer = csv.writer(f)
    writer.writerows(data)
with open("coordout.csv", "a") as f:
    print("X;Y", file=f)
    for xrouge, yrouge in prouge:
        print(f"{xrouge};{yrouge}", file=f)
matplotlib.pyplot.show()

A voir également:

4 réponses

Utilisateur anonyme
20 mai 2023 à 08:19

Bonjour 

poster ton code c'est très bien, poster disons uniquement la partie du code concernée par la question serait mieux.

En effet, si le lecteur perd trop de temps à chercher cette partie, il pourrait laisser tomber et passer à autre chose.

Par exemple, je me suis arrêté 2 minutes sur la première fonction (qui n'a rien à voir avec ta question), mais le fait que le code ne corresponde pas avec son nom m'a interpellé et donc je suis passé à "mais pourquoi appeler une fonction equadroite => j'imagine équation de la droite, et la faire calculer autre chose, qui d'ailleurs n'a pas de sens évident ?"

Bref, tu m'as perdu dès le début de la lecture de ton code. Et il a fallu que je me "fasse violence" pour revenir à ta question.

Et donc pour y répondre, tape "lire fichier texte python" dans ton moteur de recherche préféré et tu trouveras pleins d'exemples.


0
LALO_5656 Messages postés 29 Date d'inscription mardi 8 novembre 2022 Statut Membre Dernière intervention 21 septembre 2024 2
20 mai 2023 à 17:59

Bonsoir merci pour vos conseil; enfaite je voudrais pas juste lire le fichier txt ,je veux faire un return et récupérer les valeurs contenues dans cet fichier pour les utiliser dans une autre variable.

Voici les valeurs contenues dans le txt:

2077560,325010

2077560,325015

2077555,325015

2077555,325010

voici le code concerné

from tkinter import filedialog


def prompt_filename():
    return filedialog.askopenfilename(
        initialdir="/", title="Sélectionner le fichier source",
        filetypes=(
            ("Fichier texte", "*.txt"),
            ("Fichier csv", "*.csv")
        )
    )


def read_coords(f_coordsource):
    coordsource = list()
    for line in f_coordsource:
        print(line.strip())
        # ...
    return coordsource


filename_coords = prompt_filename()
with open(filename_coords, "r") as f_coords:
    (x, y) = coords = read_coords(f_coords)
0
Utilisateur anonyme
21 mai 2023 à 02:28

En programmation, récupérer les valeurs du fichier s'appelle lire le fichier.


0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 mai 2023 à 11:15

Bonjour,

Moi, je laisserais tomber la fonction read_coords(), et j'écrirais simplement ça:

coordsource = list()

with open(filename_coords, "r") as f_coords:
for line in f_coords:
	x,y = line[:-1].split(',')
	coordsource.append([float(x), float(y)])
0
Utilisateur anonyme
22 mai 2023 à 11:29

Bonjour Phill

Moi, je laisserais tomber la fonction read_coords(), 

S'il veut lire plusieurs fichiers, ou le même fichier plusieurs fois, ou même pour aérer le code, une fonction reste utile.

0