将读取的文件与同名的不同格式文件一起移动
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 程序的一般技巧
我有一个包含大量 .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 视为文字 *
。
另请参阅我在