我对我的剧本有疑问。我编写了一个自动循环输入文件列表的代码。此列表是一个类似的文本文件:
E:\ New_Fields \ Field230_traitement_1.fits
E:\ New_Fields \ Field235_traitement_1.fits
E:\ New_Fields \ Field214_traitement_1.fits
...
我的脚本读取此文件并处理列表中的每个文件:
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
但是,在此过程中,我需要打开一个新的输入文件,其路径如下:
filename =' E:\ New_Fields \ Field169_mask.fits'
我不想制作掩码文件列表,因为订单与第一个列表不同。我的问题是如何打开与处理文件对应的掩码?
例如,第一个输入文件是:Field230_traitement_1.fits所以我想在循环中上传文件:Field230_mask.fits。然后,使用文件Field235等进行相同的操作......
希望明确:)
谢谢!
答案 0 :(得分:1)
您可以轻松检查两个文件名的第一部分是否相同。
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')
在这种情况下,名称不同,因此不会执行if语句的主体。
这是使用glob
迭代文件夹中所有文件的更好方法。
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
是一个字典,其文件名的公共部分为关键字,相关文件列表为值。
P.S。我在Unix机器上,我需要使用'\\'
而不是'\'
。我不确定在Windows上,如果出现问题,请尝试使用'\'
。