我有一个问题。如何使用输入文件名重命名输出文件?
例如,我的输入文件名为:
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
告诉我,如果您有任何想法,网站或其他:) 谢谢你的回答!
答案 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))