在Python中使用grep导出多个输出文件

在Python中使用grep导出多个输出文件,python,grep,Python,Grep,我正在用python创建一个必须使用grep的代码,并且在通过grep运行它时遇到了问题。我从一个“infle”开始,然后剪切并排序该文件以创建“infle.ids”。“infle.ids”包含“infle”中的唯一ID。然后,我必须从'infle.ids'逐行运行ID,通过'infle'将所有带有ID的行提取到新的单独文件中。问题是,当我在grep中运行它时,它一次运行所有行,基本上会返回一组与原始“infle”相同的文件,而不是单独的唯一文件 这些是我试图获取的示例“infle”和输出文件

我正在用python创建一个必须使用grep的代码,并且在通过grep运行它时遇到了问题。我从一个“infle”开始,然后剪切并排序该文件以创建“infle.ids”。“infle.ids”包含“infle”中的唯一ID。然后,我必须从'infle.ids'逐行运行ID,通过'infle'将所有带有ID的行提取到新的单独文件中。问题是,当我在grep中运行它时,它一次运行所有行,基本上会返回一组与原始“infle”相同的文件,而不是单独的唯一文件

这些是我试图获取的示例“infle”和输出文件

Infile              Infile.ids    Infile.Hello     Infile.World      Infile.Adios
Hello 1 3 5 7       Hello         Hello 1 3 5 7    World 2 4 6 8     Adios 1 2 3 4
World 2 4 6 8       World         Hello a b c d    World e f g h     Adios i j k l
Adios 1 2 3 4       Adios
Hello a b c d
World e f g h
Adios i j k l
以下是我目前掌握的代码:

#!/usr/bin/python

import sys
import os

Infile = sys.argv[1]

os.system("cut -d \" \" -f1 %s | sort -u > %s.ids" % (Infile, Infile))
Infile2 = "%s.ids" % Infile

handle = open("%s.ids" % Infile, "r")
line = handle.readline()

for line in handle:
    os.system("grep \"%s\" %s > %s.%s" % (line, Infile, Infile, line))
    line = handle.readline()

handle.close()

当您在
句柄
上迭代时,每一行的末尾都会有一个新行,而
内嵌
中的行显然没有(它们首先有“1 3 5 7”内容)。这就是你的grep失败的原因

试着做

for line in handle.readlines():
    line = line.strip()
    os.system("grep \"%s\" %s > %s.%s" % (line, Infile, Infile, line))
并删除这两条
line=handle.readline()
语句-如果您正在执行
for
循环,它将迭代读取行本身。如果您想使用显式读取调用,那么
while
循环将更合适(尽管我怀疑在这种情况下是否推荐)


Cheers

“python中的代码必须使用grep”-是否愿意解释原因?让python自己处理shell中调用的所有匹配语句可能会更好。这有点歧视Python的功能;)它是涉及在Python中使用UNIX命令的赋值的一部分。这部分需要使用grep,是唯一给我带来问题的部分。