Bonjour,

Je récupère un fichier je le met dans un fichier texte, puis je lis le fichier texte ligne à ligne pour copier ce que je veux dans un autre fichier texte, et en fin je recopie et ordonne les informations dans un dernier fichier texte.
Que je finis par mettre dans un fichier csv pour pouvoir le traiter plus facilement.

Alors oui cela fonctionne mais en relisant mon code je me dis que je me suis surement vachement compliqué la tache.

Je me dis également que créer des fichiers tempo pour a chaque fois le lire, et copier les valeurs est surement gourmand en ressource.

Y aurait il un moyen de remplacer l'écriture dans un fichier text pour par exemple le mettre dans un fichier virtuel ou un truc du genre qui serait plus rapidement accessible par python que de lire un fichier txt ?

J'espère avoir été assez clair pour que vous puissiez me donner une piste à creuser.

Merci d'avance


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fichier_source = open(outputfile, "r")
fichier_destination = open(outputfile_mod, "w")
 
for ligne in fichier_source:
    temp = str(ligne).lstrip()
    if temp[:12] == "(0008, 0104)":
        fichier_destination.write(temp)
    elif temp[:12] == "(0008, 0100)":
        fichier_destination.write(temp)
    elif temp[:12] == "(0040, a30a)":
        fichier_destination.write(temp)
 
fichier_source.close()
fichier_destination.close()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
fichier_source = open(outputfile_mod, "r")
fichier_destination = open(outputfile_final, "w")
lines = fichier_source.readlines()
 
for i in range(1, len(lines)):
    if lines[i][:12] == "(0040, a30a)":
        # ligne -6 c'est le tagdicom du groupe de la mesure
        tmp = lines[i-6].split("'")
        if tmp[1] == '121410': # code d'une non mesure
            fichier_destination.write(',')
        else:
            fichier_destination.write(tmp[1] + ',')
        # ligne -5 c'est le nom groupe de la mesure
        tmp = lines[i-5].split("'")
        if tmp[1] == 'User chosen value': # valeur text d'une non mesure
            fichier_destination.write(',')
        else:
            fichier_destination.write(tmp[1] + ',')
        # ligne -4 le tag dicom de la mesure
        tmp = lines[i-4].split("'")
        fichier_destination.write(tmp[1] + ',')
        # ligne -3 le nom de la mesure
        tmp = lines[i-3].split("'")
        fichier_destination.write(tmp[1] + ',')
        fichier_destination.write(" ")
        # ligne i la valeur mesurée
        tmp = lines[i].split("'")
        fichier_destination.write(tmp[1] + ',')
        fichier_destination.write(" ")
        # ligne -1 l'unité de mesure
        tmp = lines[i-1].split("'")
        fichier_destination.write(tmp[1])
        fichier_destination.write("\n")
fichier_destination.close()
fichier_source.close()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nom_fichier = nom_fichier + '.csv'
with open(outputfile_final, 'r') as in_file:
    stripped = (line.strip() for line in in_file)
    lines = (line.split(",") for line in stripped if line)
    with open(nom_fichier, 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('code DICOM paramère', 'Nom paramètre',
                         'Code DICOM mesure', 'Valeur mesurée',
                         'Mesure', 'Unité mesure'))
        writer.writerows(lines)
 
# Supprime les fichiers temporaires
os.remove(outputfile)
os.remove(outputfile_mod)
os.remove(outputfile_final)