读取文件中的行,如果包含字符串则打印行

时间:2015-11-11 18:54:05

标签: python python-2.7 text

我有一个工作代码,它打开一个文件,查找一个字符串,如果它包含该字符串,则打印该行。我这样做是为了让我可以手动决定是否应该从我的数据集中删除该行。

但是,如果我能告诉程序读取包含两个逗号之间的字符串的行的部分,那会好得多。

我现在的代码(见下文)

with open("dvd.txt") as f:
    for num, line in enumerate(f, 1):
        if " arnold " in line:
            num = str(num)
            print line + '' + num

打印每一行:

77.224998664,2014-10-19,386.5889,the best arnold ***** ,81,dvd-action,Cheese 5gr,online-dvd-king93,0.19976,18,/media/removable/backup/2014-10-19/all_items/cheese-5gr?feedback_page=1.html,    ships from: Germany    ships to: Worldwide  ,2014-07-30,online-dvd-king,93 1

我希望它能打印出来:

,the best arnold ***** , 1

the best arnold *****  1

我看了this个问题,但我希望避免使用CSV。

如果在逗号或任何其他特定字符之间找到文本是不合适的,那么在我正在寻找的字符串之前和之后打印3个单词会很有用。

2 个答案:

答案 0 :(得分:10)

这与str.split()非常简单。如下修改您的功能将产生您想要的输出。

with open("dvd.csv") as f:
    for num, line in enumerate(f, 1):
        if " arnold " in line:
            num = str(num)
            print line.split(',')[3] + '' + num 

str.split通过指定的分隔符将字符串拆分为列表。要访问所需的列表条目,只需提供适当的索引(在您的情况下应为3)。

另外,您可以使用str.format()方法生成输出,以使其更好一些:

print "{} {}".format(line.split(',')[3], num)

这也允许您删除num = str(num),因为格式方法可以处理多种数据类型(而不是字符串连接,而不是)。

答案 1 :(得分:3)

作为替代方案,您可以使用正则表达式,如下所示:

with open("dvd.txt") as f:
    for num, line in enumerate(f, 1):
        re_arnold = re.search(r',\s*([^,]*?arnold[^,]*?)\s*,', line)

        if re_arnold:
            print '{} {}'.format(re_arnold.group(1), num)

这将提取整个条目(逗号之间),无论它在哪个字段中。