Переместите прочитанные файлы вместе с файлами с одинаковыми именами - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть файл, который содержит много файлов .fits и .dat.Во-первых, я хочу, чтобы они были разделены параметром и перемещены в другой файл (у меня есть эта часть сделано).Затем проблема заключается в том, что существует файл .dat с точно таким же именем для каждого файла .fits (например, 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/')

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

В этой строке

shutil.move((fitsName +'*.dat'), '/home/Bach/')`

переменная fitsName представляет собой строку, похожую на something.fits.Теперь вы добавляете к нему строку '*.dat', чтобы создать строку something.fits*.dat буквально.Это означает, что необходимо переместить файл на буквально с именем something.fits*.dat, который предположительно не существует.Вы, вероятно, хотите что-то вроде os.path.splitext(fitsName[0]) + '.dat'.

Также обратите внимание, что подстановочные расширения, такие как *, обычно не имеют значения для функций в Python, которые принимают имена файлов.Расширение по шаблону - это особенность вашей оболочки (например, командной строки).Фактически, именно поэтому вы должны использовать модуль glob, чтобы получить такую ​​функциональность в Python.glob.glob('*.foo') похоже на выполнение ls *.foo в вашей оболочке, но вы должны использовать модуль glob непосредственно для этой функции.В общем случае, если вы передаете имя файла, содержащее *, функции (например, как shutil.move, который, несмотря на то, что находится в модуле «shell utils», не поддерживает расширение с подстановочными знаками), он будет восприниматься какбуквальный *.

См. Также мои общие советы по отладке простых программ на Python по адресу Мой код Python, который преобразует числа между базами, содержит несколько ошибок.Что может быть не так и как я могу их найти?

1 голос
/ 03 апреля 2019

Назначение против сравнения

Оператор b == a + '.dat' равен False и ничего не присваивает b, как b = a + '.dat'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...