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

时间:2013-04-08 09:28:51

标签: python grep

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

这些是我想要获取的“Infile”和输出文件的示例。

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 个答案:

答案 0 :(得分:0)

当您对handle进行迭代时,每个line最后会有一个换行符,Infile中的行显然没有(他们有“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循环会更合适(虽然我怀疑在这种情况下推荐)。

干杯