使用输入文件名创建新文件

时间:2016-03-24 12:46:56

标签: python filenames

我有一个问题。如何使用输入文件名重命名输出文件?

例如,我的输入文件名为:

Field_52_combined_final_roughcal.fits

我想获得一个输出文件名,如:

Field_52_traitement_1.fits

我知道我可以写:

hdu.writeto('Field_52_traitement_1.fits')   

但是,我有另一个脚本循环200个文件,我希望输出文件名由输入文件名自动生成。

我的脚本看起来像这样(对于单个输入文件):

#!/usr/bin/python
# coding: utf-8

from astropy.io import fits
from astropy.table import Table
import numpy as np

                ###################################
                # Fichier contenant le champ brut #
                ###################################

filename = 'E:/Fields/Field52_combined_final_roughcal.fits'

# Ouverture du fichier à l'aide d'astropy  
field = fits.open(filename)          

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

                #######################################################
                # Application du tri en fonction de divers paramètres #
                #######################################################

Several conditions / sort

        ###################################################
        # Ecriture du résultat dans nouveau fichier .fits #
        ###################################################

hdu = fits.BinTableHDU(data=tbdata_final)
hdu.writeto('{}_{}'.format(filename,'traitement_1'))    

但是,有了这种脚本,我得到了:

Field_52_combined_final_roughcal.fits_traitement_1

告诉我,如果您有任何想法,网站或其他:) 谢谢你的回答!

3 个答案:

答案 0 :(得分:2)

您可以使用简单的字符串替换方法并为输出文件名创建变量。

filename = 'E:/Fields/Field52_combined_final_roughcal.fits'
outname = filename.replace('combined_final_roughcal', 'traitement_1')

现在只需写入名为'outname'的文件,现在是:

  

E:/Fields/Field52_traitement_1.fits

答案 1 :(得分:1)

>>> filename = 'Field_52_combined_final_roughcal.fits'
>>> filename.split('_')
['Field', '52', 'combined', 'final', 'roughcal.fits']
>>> filename.split('_')[:2]
['Field', '52']
>>> '_'.join(filename.split('_')[:2])
'Field_52'

因此,将其应用于您的代码,请使用:

hdu.writeto('{}_{}'.format('_'.join(filename.split('_')[:2]),'traitement_1')) 

而不是:

hdu.writeto('{}_{}'.format(filename,'traitement_1')) 

答案 2 :(得分:1)

这是实现目标的一种方式。最好的"方式取决于您希望文件名的动态程度。例如。是否要增加" traitement"或不。

def create_new_filename(old_filename, traitement):
    pieces = old_filename.split("_")
    return "_".join([pieces[0], pieces[1], "traitement", str(traitement)]) +  ".fits"

在翻译中:

>>> print create_new_filename("Field_52_combined_final_roughcal.fits", 1)
Field_52_traitement_1.fits

要在您的情况下使用它,您需要传递旧文件名和您想要的行为编号:

hdu.writeto(create_new_filename("Field_52_combined_final_roughcal.fits", 1))