如何使用python从文本文件复制特定字符串?

时间:2019-06-19 23:19:23

标签: python

我在天文学领域工作,我用来解压缩从望远镜获得的图像的过程可能非常繁琐。图像输入的格式为“ fits.fz”,代表fits.fits-zipped。我想将它们解压缩为“ .fits”。我已经在开发一个简化此解压缩过程的程序。我通过Python和Tkinter创建了带有两个按钮的图形界面。第一个按钮创建一个名为“ list.txt”的文本文件,然后执行一个预先存在的.bat文件,该文件将特定目录中以“ fits.fz”结尾的每个文件的名称转储到“ list.txt”中。还应该使用第一个按钮将文件的特定名称复制到另一个bat文件中的特定位置。另一个.bat文件称为'Decompress.bat',应该对'list.txt'中的每个文件使用以下命令:

 C:\ds9\ds9.exe 
 C:\directory\FITS FILE HERE 
-savefits

我希望python程序能够从一行代码中复制特定部分并将其粘贴到“ FITS FILE HERE”所在的位置。

以下是按下第一个按钮时执行的功能。

 f = open('C:/jah/list.txt')
 f1 = open('C:/jah/decompress.bat', 'a')

 def begin_wombocombo(): #Is function for first button
     open('C:/jah/list.txt', 'w').close() #Clears 'list.txt'
     open('C:/jah/decompress.bat', 'w').close() #Clears 'decompress.bat'
     subprocess.call([r'C:/jah/newbat.bat']) #Dumps directory into 'list.txt'

     doIHaveToCopyTheLine=False #Bool for whether or not the program has to copy line
     for line in f.readlines(): #loops through all instances to find fz files and then pastes them into decompress.bat
       if 'fits.fz' in line:
         doIHaveToCopyTheLine=True
       if doIHaveToCopyTheLine:
         f1.write(line)
     f1.close()
     f.close()

此问题是仅复制具有fits.fz文件的文本行。这意味着它将复制该行上的所有其他内容,例如创建文件的时间。有什么方法可以简单地单独复制并粘贴fits.fz文件吗?我将如何处理这些字符串到.bat文件?

谢谢您的时间,同时第二个按钮只是执行'decompress.bat',该文件带有用于解压缩图像的命令。

1 个答案:

答案 0 :(得分:0)

我认为在Python中,这样的方法就可以解决问题,而无需写出批处理文件等。

import os
import subprocess

target_directory = 'C:\\directory\\' # change this as required
zipped_files = [x for x in os.listdir(target_directory) 
                   if x.lower().endswith('.fits.fz')]
for filename in zipped_files:
    subprocess.call([r'C:\ds9\ds9.exe', os.path.abspath(filename), '-savefits'])