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

Move the read files along with same named different format files

我有一个包含大量 .fits 和 .dat 文件的文件。首先,我希望它们由一个参数分隔并移动到另一个文件(我已经完成了这部分)。然后,问题是每个 .fits 文件都有一个名称完全相同的 .dat 文件(例如 kkk.fits , kkk_trl.dat ),我希望同名的 .dat 文件与 .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 == 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/')

赋值与比较

语句 b == a + '.dat' 等于 False,并且不会像 b = a + '.dat' 那样将任何东西分配给 b

这条线

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') 类似于在 shell 中执行 ls *.foo,但您必须直接使用 glob 模块来实现该功能。通常,如果您将包含 * 的文件名传递给函数(例如 shutil.move,尽管它位于 "shell utils" 模块中,但 支持通配符expansion) 它只会将 is 视为文字 *

另请参阅我在

上调试简单 Python 程序的一般技巧