如何在许多文件上运行python脚本以获取许多输出文件?

时间:2015-12-02 09:11:16

标签: python linux bash shell python-2.7

我是编程新手,我编写了一个脚本来从vcf文件中提取文本。我正在使用Linux虚拟机并运行Ubuntu。我已通过命令行运行此脚本,方法是将目录更改为包含vcf文件的文件,然后输入python script.py

我的脚本知道要处理哪个文件,因为我的脚本的开头是:

my_file = open("inputfile1.vcf", "r+")
outputfile = open("outputfile.txt", "w")

脚本将我需要的信息放入列表中,然后将其写入outputfile。但是,我有许多输入文件(所有.vcf),并希望将它们写入与输入名称相似的不同输出文件(例如input_processed.txt)。

我是否需要运行shell脚本来迭代文件夹中的文件?如果是这样,我将如何更改python脚本以适应这个?即将列表写入输出文件?

5 个答案:

答案 0 :(得分:1)

我会将它集成到Python脚本中,这样您就可以轻松地在其他平台上运行它,并且无论如何都不会添加太多代码。

import glob
import os

# Find all files ending in 'vcf'
for vcf_filename in glob.glob('*.vcf'):
    vcf_file = open(vcf_filename, 'r+')

    # Similar name with a different extension
    output_filename = os.path.splitext(vcf_filename)[0] + '.txt'
    outputfile = open(output_filename, 'w')

    # Process the data
    ...

要在单独的目录中输出结果文件,我会:

import glob
import os

output_dir = 'processed'
os.makedirs(output_dir, exist_ok=True)

# Find all files ending in 'vcf'
for vcf_filename in glob.glob('*.vcf'):
    vcf_file = open(vcf_filename, 'r+')

    # Similar name with a different extension
    output_filename = os.path.splitext(vcf_filename)[0] + '.txt'
    outputfile = open(os.path.join(output_dir, output_filename), 'w')

    # Process the data
    ...

答案 1 :(得分:0)

你不需要编写shell脚本, 也许这个问题可以帮到你?

How to list all files of a directory?

答案 2 :(得分:0)

这取决于你如何实现迭代逻辑。

  1. 如果你想在python中实现它,那就去做吧;

  2. 如果要在shell脚本中实现它,只需将python脚本更改为接受参数,然后使用shell脚本使用合适的参数调用python脚本。

答案 3 :(得分:0)

我有一个经常使用的脚本,其中包括使用PyQt5弹出一个提示用户选择文件的窗口......然后它遍历目录以查找目录中的所有文件:

pathname = first_fname[:(first_fname.rfind('/') + 1)] #figures out the pathname by finding the last '/'
new_pathname = pathname + 'for release/' #makes a new pathname to be added to the names of new files so that they're put in another directory...but their names will be altered 

file_list = [f for f in os.listdir(pathname) if f.lower().endswith('.xls') and not 'map' in f.lower() and not 'check' in f.lower()] #makes a list of the files in the directory that end in .xls and don't have key words in the names that would indicate they're not the kind of file I want

您需要导入os才能使用os.listdir命令。

答案 4 :(得分:0)

您可以使用listdir(您需要编写条件来过滤特定扩展名)或glob。我通常更喜欢glob。例如

import os
import glob
for file in glob.glob('*.py'):
    data = open(file, 'r+')
    output_name = os.path.splitext(file)[0]
    output = open(output_name+'.txt', 'w')
    output.write(data.read())

此代码将从输入中读取内容并将其存储在outputfile中。