我有一个包含很多.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/')
答案 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”模块中,但它不不支持通配符扩展),它将只是将其视为文字*
。
答案 1 :(得分:1)
语句b == a + '.dat'
等于False,并且没有像b
那样向b = a + '.dat'
分配任何内容。