在读取文件并用变量分隔后将文件移动到文件夹
moving files to folders after they got read and separated by a variable
我创建了一个 python 脚本,它从文件夹中的文件中读取变量 FILTER
并将结果显示在屏幕上。但是,有 4 种类型的变量,我希望这个脚本将它们全部分离到相应的文件夹中。就像将所有文件移动到名为 "V" 的文件夹中,如果它们具有变量 FILTER = V
,如果它们具有 FILTER = B
,则将所有 B
移动到名为 [=] 的文件夹中31=] 下面的脚本用于查看哪些文件在屏幕上有哪些过滤器。
import glob
import pyfits
import shutil
myList = []
for fitsName in glob.glob('*.fits'):
hdulist = pyfits.open(fitsName)
b = hdulist[0].header['FILTER']
c = b
myList.append(c)
hdulist.close()
for item in sorted(myList):
print item
屏幕上的结果:
B
B
B
V
V
V
R
R
R
I
I
I
现在使用密码 i 运行;
import os
import glob
import pyfits
import shutil
myList = []
for fitsName in glob.glob('*.fits'):
hdulist = pyfits.open(fitsName)
hdu = hdulist[0]
prihdr = hdulist[0].header
a = hdulist[0].header['FILTER']
b = a
if b == "B":
shutil.move('/home/usr/Desktop/old/', '/home/usr/Desktop/new/B/')
myList.append(b)
hdulist.close()
现在这段代码可以正常工作,但是它将 Desktop/old/ 中的所有文件移动到 Desktop/new/B/ 但是,一些文件有 b = V 和其他变量,那么这里的问题是什么?如何指定哪些文件的名称具有我想要的过滤器,以便它可以自动移动?
所以它就像上面的代码,如果 c= FILTERNAME1 移动到 SOMEFOLDER1 如果 c = FILTERNAME2 移动到 SOMEFOLDER2 等等......我无法为此编写工作代码行所以任何帮助将不胜感激很多。
解决方案;
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['FILTER']
if a == "B":
shutil.move(fitsName, '/home/usr/Desktop/new/B/')
if a == "V":
shutil.move(fitsName, '/home/usr/Desktop/new/V/')
if a == "R":
shutil.move(fitsName, '/home/usr/Desktop/new/R/')
if a == "I":
shutil.move(fitsName, '/home/usr/Desktop/new/I/')
您可以使用 shutil 模块移动文件。
shutil.move(source,destination)
将源文件和目标文件定义为字符串,然后将它们传递给 shutil.move()
,如下所示:
import shutil
if c == "A":
shutil.move(source, destA)
elif c == "B":
shutil.move(source, destB)
我还建议您了解 if 语句的工作原理。这里有一些资源:https://www.tutorialspoint.com/python/python_if_else.htm, https://www.w3schools.com/python/python_conditions.asp, https://docs.python.org/3/tutorial/controlflow.html
我创建了一个 python 脚本,它从文件夹中的文件中读取变量 FILTER
并将结果显示在屏幕上。但是,有 4 种类型的变量,我希望这个脚本将它们全部分离到相应的文件夹中。就像将所有文件移动到名为 "V" 的文件夹中,如果它们具有变量 FILTER = V
,如果它们具有 FILTER = B
,则将所有 B
移动到名为 [=] 的文件夹中31=] 下面的脚本用于查看哪些文件在屏幕上有哪些过滤器。
import glob
import pyfits
import shutil
myList = []
for fitsName in glob.glob('*.fits'):
hdulist = pyfits.open(fitsName)
b = hdulist[0].header['FILTER']
c = b
myList.append(c)
hdulist.close()
for item in sorted(myList):
print item
屏幕上的结果:
B
B
B
V
V
V
R
R
R
I
I
I
现在使用密码 i 运行;
import os
import glob
import pyfits
import shutil
myList = []
for fitsName in glob.glob('*.fits'):
hdulist = pyfits.open(fitsName)
hdu = hdulist[0]
prihdr = hdulist[0].header
a = hdulist[0].header['FILTER']
b = a
if b == "B":
shutil.move('/home/usr/Desktop/old/', '/home/usr/Desktop/new/B/')
myList.append(b)
hdulist.close()
现在这段代码可以正常工作,但是它将 Desktop/old/ 中的所有文件移动到 Desktop/new/B/ 但是,一些文件有 b = V 和其他变量,那么这里的问题是什么?如何指定哪些文件的名称具有我想要的过滤器,以便它可以自动移动?
所以它就像上面的代码,如果 c= FILTERNAME1 移动到 SOMEFOLDER1 如果 c = FILTERNAME2 移动到 SOMEFOLDER2 等等......我无法为此编写工作代码行所以任何帮助将不胜感激很多。
解决方案;
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['FILTER']
if a == "B":
shutil.move(fitsName, '/home/usr/Desktop/new/B/')
if a == "V":
shutil.move(fitsName, '/home/usr/Desktop/new/V/')
if a == "R":
shutil.move(fitsName, '/home/usr/Desktop/new/R/')
if a == "I":
shutil.move(fitsName, '/home/usr/Desktop/new/I/')
您可以使用 shutil 模块移动文件。
shutil.move(source,destination)
将源文件和目标文件定义为字符串,然后将它们传递给 shutil.move()
,如下所示:
import shutil
if c == "A":
shutil.move(source, destA)
elif c == "B":
shutil.move(source, destB)
我还建议您了解 if 语句的工作原理。这里有一些资源:https://www.tutorialspoint.com/python/python_if_else.htm, https://www.w3schools.com/python/python_conditions.asp, https://docs.python.org/3/tutorial/controlflow.html