Récupérer les valeur a partir d'un ensemble de fichiers

Fermé
Mario - 17 août 2021 à 13:54
 vortex - 18 août 2021 à 17:01
Bonjour, l'équipe

j'ai un petit problème, j'espère que je trouve de l'aide.

j'ai plusieurs fichiers (100 fichiers), chacun contient 10 colonnes qui sont séparées par des espaces, chaque colonne contient 1000 cases (ligne).

moi je veux récupérer la valeur de la case de la deuxième colonne qui se situe a la ligne 450, et ça pour tous les fichiers.

j'ai rédigé un programme sous python (Spider), mais il prend beaucoup de temps, et je sais pas c'est juste ou pas, sachant que je travail dans l’environnement Linux, vous trouvez ci-joint le programme et j'espère que je trouve de l'aide

import csv
import math
import numpy as np
import matplotlib.pyplot as plt

nfichier = 1000
mm = 0
while mm < nfichier:
with open('/home/c51881/Documents/spaps_carmel/Gerstheim_Machine(08062021_ponte)/bin/B_A_pointExplorateur1-'+ str(mm + 1) +'.don', 'r') as file:
reader = csv.reader(file, delimiter = ' ')
gg = list(reader)
temps = []
Br = []
Bt = []
Bn = []
N = []
force=[]
for i in range(1,len(gg),1):
str_list = list(filter(None, gg[i]))
temps.append(float(str_list[0]))
Br.append(float(str_list[1]))
Bt.append(float(str_list[2]))



Bn.append(float(str_list(450))
print(Bn)

Merci beaucoup

Configuration: Windows / Firefox 78.0

3 réponses

yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
17 août 2021 à 14:18
bonjour,
le programme te donne le résultat attendu?
je le trouve bizarre...
merci d'utiliser les balises de code, comme expliqué ici: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
Bonjour,

Si le besoin n'est que d'obtenir la seconde colonne de la ligne 450, alors nul besoin de tout charger en mémoire chaque fois le contenu de tes fichiers, et donc pas besoin du module csv, une simple lecture des lignes du fichier jusqu'à la ligne 450 et puis récupération de la seconde colonne après scission de la ligne.

Ce qui pourrait donner (aucunement testé) :
files_number = 1000
for fi in range(1, files_number + 1):
    file_path = (
        '/home/c51881/Documents/spaps_carmel/Gerstheim_Machine'
        f'(08062021_ponte)/bin/B_A_pointExplorateur1-{fi}.don'
    )
    with open(file_path) as f:
        for li, line in enumerate(f, 1):
            if li == 450:
                row = line.split(' ')[1]
                break
        print(row)


Il faut bien entendu au lieu du print enregistrer row dans la liste de ton choix.
Enfin à toi de faire ta popote avec ça et pourquoi pas en faire une fonction ^^
0
Bonjour
ça marche pas de mon coté, svp est ce qu'il y a une possibilité de me donner votre mail, comme ça on peu échanger entre nous.

je vous remercie.

cordialement
0
Bonjour,

Non désolé, je ne donne pas d'email sur un forum public.

Les "ça marche pas" ne va pas beaucoup aider à résoudre ton problème, il faut donc montrer un peu ce que tu as fait, et dire ce que tu obtiens, une erreur ? Mauvaises données obtenues ? Autre ?

Car si tu comprends correctement le code exemple que je t'ai montré, nulle raison que ça ne fonctionne pas.
0