将读取的文件与相同命名的不同格式文件一起移动

时间:2019-04-02 13:51:23

标签: python python-2.7 fits

我有一个包含很多.fits和.dat文件的文件。首先,我希望它们被参数分隔并移至另一个文件(这部分已经完成)。然后,问题是每个.fits文件都有一个名称完全相同的.dat文件(例如kkk.fits,kkk_trl.dat),并且我希望将相同的.dat文件与.fits文件一起移动到新文件夹。

 import os
 import glob
 import pyfits
 import shutil


for fitsName in glob.glob('*.fits'):
hdulist = pyfits.open(fitsName)
hdu = hdulist[0]
a = hdulist[0].header['OBJECT']
if a == "Bach":
shutil.move(fitsName, '/home/Bach/')
   b == a + '.dat'
    shutil.move(b, '/home/Bach/')

使用此代码,我可以轻松移动所有.fits文件,但.dat文件仍然存在。

下面的代码接近答案,但是又带来了另一个问题,这一次代码试图将最后一行的文件kkk.fits.dat移动。我需要它来读取文件为kkk_trl.dat

import os
import glob
import pyfits
import shutil


for fitsName in glob.glob('*.fits'):
hdulist = pyfits.open(fitsName)
hdu = hdulist[0]
a = hdulist[0].header['OBJECT']
if a == "Bach":
shutil.move(fitsName, '/home/Bach/')
shutil.move((fitsName +'*.dat') , '/home/Bach/')

下面是解决该问题的最新步骤。此时间代码没有错误,但只有.fits文件进入目标文件夹,而.dat文件停留在该位置。

import os
import glob
import pyfits
import shutil


for fitsName in glob.glob('*.fits'):
hdulist = pyfits.open(fitsName)
hdu = hdulist[0]
a = hdulist[0].header['OBJECT']
if a == "Bach":
shutil.move(fitsName, '/home/Bach/')
b = os.path.splitext(fitsName[0]) + '_trl.dat'
shutil.move(b, '/home/Bach/')

2 个答案:

答案 0 :(得分:2)

在此行

shutil.move((fitsName +'*.dat'), '/home/Bach/')`

变量fitsName是一个看起来像something.fits的字符串。现在,您将附加字符串'*.dat'到字面上创建字符串something.fits*.dat。这意味着将文件移动为字面名为something.fits*.dat的文件,该文件可能不存在。您可能想要像os.path.splitext(fitsName[0]) + '.dat'这样的东西。

还请注意,像*这样的通配符扩展通常对于接受文件名的Python函数没有意义。通配符扩展是 shell 的功能(例如,命令行)。实际上,这就是必须使用glob模块才能在Python中获得类似功能的原因。 glob.glob('*.foo')与在外壳中执行ls *.foo类似,但是您必须直接使用glob模块来实现该功能。通常,如果您将包含*的文件名传递给函数(例如shutil.move,尽管位于“ shell utils”模块中,但它不支持通配符扩展),它将只是将其视为文字*

另请参见My python code that converts numbers between bases has several errors. What could be wrong and how can I find them?

中有关调试简单Python程序的一般提示。

答案 1 :(得分:1)

分配与比较

语句b == a + '.dat'等于False,并且没有像b那样向b = a + '.dat'分配任何内容。