2016-04-20 6 views
0

Ich habe eine Frage zu meinem Skript. Ich schreibe einen Code, der automatisch eine Liste von Eingabedateien durchläuft. Diese Liste ist eine Textdatei wie folgt aus:Öffnen Sie eine zweite Datei in einer Schleife

E: \ New_Fields \ Field230_traitement_1.fits

E: \ New_Fields \ Field235_traitement_1.fits

E: \ New_Fields \ Field214_traitement_1.fits

...

Mein Skript liest diese Datei und verarbeitet jede Datei in der Liste:

with open("C:\Users\Valentin\Desktop\Stage M2\liste_traiteXY.txt", "r") as f : 

    fichier_entier = f.read() 
    files = fichier_entier.split("\n") 

for fichier in files : 

    with open(fichier, 'r') : 

       outname = filename.replace('dereddenedXY.fits', 'Distribution_etoiles.png') 
       outname2 = filename.replace('dereddenedXY.fits', 'Carte_densite_nonlisse.png') 
       outname3 = filename.replace('dereddenedXY.fits', 'Carte_densite_lisse.png') 
       outname6 = filename.replace('dereddenedXY.fits', 'Histogramme2D_heatmap.png') 
       outname7 = filename.replace('dereddenedXY.fits', 'Masque_brut.png') 
       outname8 = filename.replace('dereddenedXY.fits', 'Masque_convolue.png') 
       outname10 = filename.replace('dereddenedXY.fits', 'SN_map.png') 
       outname11 = filename.replace('dereddenedXY.fits', 'Histogramme_SN_map.png') 
       outname12 = filename.replace('dereddenedXY.fits', 'SN_map_final.png') 
       outname15 = filename.replace('dereddenedXY.fits', 'resume.png') 

     print "Fichier traité\n : " + fichier 
     reading = fits.open(fichier)   # Ouverture du fichier à l'aide d'astropy 

     tbdata = reading[1].data    # Lecture des données fits  

# PROCESS 

Aber während des Prozesses, ich brauche eine neue Eingabedatei zu öffnen, in dem der Pfad wie folgt festgelegt:

filename = 'E: \ New_Fields \ Field169_mask.fits'

Ich möchte keine Liste von Maskendateien erstellen, da die Reihenfolge nicht die gleiche wie die erste Liste ist. Meine Frage ist, wie kann ich die Maske öffnen, die der Bearbeitungsdatei entspricht?

Zum Beispiel ist die erste Eingabedatei: Field230_traitement_1.fits, also möchte ich in der Schleife die Datei hochladen: Field230_mask.fits. Dann machen die gleiche Sache mit der Datei Field235 etc ...

Hoffentlich klar sein :)

Thank you!

Antwort

1

Sie können leicht überprüfen, ob der erste Teil der beiden Dateinamen identisch ist.

file1 = 'E:\New_Fields\Field230_traitement_1.fits' 
file2 = 'E:\New_Fields\Field169_mask.fits' 

if file1.split('\')[-1].split('_')[0] == file2.split('\')[-1].split('_')[0]: 
    print('the files are related') 

In diesem Fall sind die Namen unterschiedlich, so der Körper der if-Anweisung nicht ausgeführt werden.

Hier ist eine bessere Möglichkeit, alle Dateien in einem Ordner mit glob zu iterieren.

import glob 

associatedFiles = {} 
for fileName in glob.glob('E:\\New_Fields\\*.*'): 
    fileID = fileName.split('\\')[-1].split('_')[0] 
    if fileID not in associatedFiles: 
     associatedFiles[fileID] = [fileName] 
    else: 
     associatedFiles[fileID].append(fileName) 

associatedFiles ist ein Wörterbuch der gemeinsamen Teil des Dateinamens als Schlüssel und eine Liste der zugehörigen Dateien als Wert.

P.S. Ich bin auf einer Unix-Maschine und ich muss '\\' anstelle von '\' verwenden. Ich bin mir nicht sicher, ob unter Windows dasselbe passiert, wenn etwas schief geht, versuchen Sie es mit '\'.

+0

Und wie ist es möglich, die gute Datei 2 (Maske) mit der Datei 1 (Traitement) zu verknüpfen? Das heißt, nehmen Sie automatisch "Field230_mask.fits", wenn es "Field230_traitement_1.fits" ist, nehmen Sie "Field158_mask.fits", wenn es "Field158_traitement_1.fits" usw. ist. – Deadpool

+0

Wenn die Namen vorhersehbar sind, gibt es in Ihrem Fall keine Probleme Der Name ist ''FieldXXX' + '_' + 'traitement_1'' oder' +' mask'. Mit split() können Sie also "FieldXXX" extrahieren. Sobald Sie das haben, wird die Maskendatei ''FieldXXX' + '_' + 'mask''und die Traitement-Datei wird'' FieldXXX '+' _ '+' traitement_1'' sein. –

+0

Ok, danke für Ihre Antwort! Ich werde deine Idee versuchen und ich werde zurückkommen, wenn ich Probleme bekomme;) Ich stelle die Frage wie gelöst auf den Moment;) – Deadpool

Verwandte Themen