перемещение файлов в папки после того, как они были прочитаны и разделены переменной - PullRequest
0 голосов
/ 04 сентября 2018

Я создал скрипт Python, который читает переменную FILTER из файлов в папке и выводит результат на экран. Однако существует 4 типа переменных, и я хотел бы, чтобы этот скрипт разделял их все на соответствующие папки. Например, переместить все файлы в папку с именем «V», если они имеют переменную FILTER = V, если они имеют FILTER = B, а затем переместить все файлы B в папку с именем «B». какие файлы имеют фильтр на экране.

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

теперь с shutil кодом, который я запускаю;

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()

Теперь этот код работает без проблем, но он перемещает все файлы на рабочем столе / старом / на рабочий стол / новый / 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/')

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете использовать модуль shutil для перемещения файлов.

shutil.move(source,destination)

Определите исходный файл и файлы назначения как строки, а затем передайте их shutil.move() следующим образом:

import shutil
if c == "A":
    shutil.move(source, destA)
elif c == "B":
    shutil.move(source, destB)

Я бы также рекомендовал вам узнать, как работают заявления. Вот некоторые ресурсы: 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

...