在循环中打开第二个文件

2024-06-16 09:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我对我的剧本有个问题。我写了一个代码,自动循环输入文件列表。此列表是这样的文本文件:

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\u traitement\u 1.fits,因此我想在循环中上载文件:Field230\u mask.fits。然后,对文件字段235等做同样的处理

希望清楚:)

谢谢你


Tags: 文件mapfields列表newpngopenfilename
1条回答
网友
1楼 · 发布于 2024-06-16 09:22:46

您可以很容易地检查两个文件名的第一部分是否相同

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是一个字典,文件名的公共部分作为键,相关文件的列表作为值

另外,我在Unix机器上,我需要使用'\\'而不是'\'。我不确定在Windows上是否是相同的,如果出现问题,请尝试使用'\'

相关问题 更多 >