【问题标题】:Why is grep not finding string when definitely in file?为什么 grep 在文件中肯定找不到字符串?
【发布时间】:2015-08-20 14:43:12
【问题描述】:

第一次发帖,有点菜鸟,所以如果礼仪或格式有任何问题,请告诉我。

我正在尝试对文件(下图)使用 grep 函数来检查文件中是否存在单词。当我查看文件时,这个词肯定存在。它被空格包围,是一行中的最后一个单词。

由于某种原因,grep 找不到单词,程序返回 0。为什么?

谢谢!

import os
import re

word = "aliows"
folder = '/Users/jordanfreedman/Thinkful/Projects/Spam_Filter/enron1/spam/'
email = '4201.2005-04-05.GP.spam.txt'

number = int(os.popen("grep -w -i -l " + word + " " + folder + email + " | wc -l").read())
print number

【问题讨论】:

  • 您是否只是想获取word 在文本文件中出现的次数?
  • 在命令行上运行grep 命令会发生什么?
  • 如果您在 shell 中手动运行该命令,它会起作用吗?你可以grep 获取该行的其他内容并将输出传输到xxdhexdump 吗?
  • 问题出在管道上。 popen 无法识别管道,因此 | 被视为单个参数,这不是有意的。
  • @IanAuld 只是想看看这个词是否存在于文件中

标签: python regex grep


【解决方案1】:

你可以通过退出状态判断是否匹配:

import os
from subprocess import STDOUT, call

path = os.path.join(folder, email)
with open(os.devnull, 'wb', 0) as devnull:
   rc = call(['grep', '-w', '-l', '-i', '-F', word, path],
             stdout=devnull, stderr=STDOUT)
if rc == 0: 
    print('found')
elif rc == 1:
    print('not found')
else:
    print('error')

或者as @stevieb mentioned,你可以在纯Python中找到该单词是否在给定文件中:

import re
from contextlib import closing
from mmap import ACCESS_READ, mmap

with open(path) as f, closing(mmap(f.fileno(), 0, access=ACCESS_READ)) as m:
   if re.search(br"(?i)\b%s\b" % re.escape(word), m):
       print('found')

【讨论】:

    【解决方案2】:

    您需要发布文件的片段,以便我们测试grep 语句。此外,没有理由掏空:

    import re
    
    word = "aliows"
    folder = '/Users/jordanfreedman/Thinkful/Projects/Spam_Filter/enron1/spam/'
    email = '4201.2005-04-05.GP.spam.txt'
    
    file = folder + email
    fh = open(file, 'r')
    
    contents = re.findall(word, fh.read())
    
    print(len(contents))
    

    【讨论】:

    • 我认为这可行 - 谢谢!让我在我的主程序(循环所有文件)上试一试...
    • 代码将word 视为可能不受欢迎的正则表达式。你还没有实现-w(匹配字边界)、-l(提前退出)、-i(忽略大小写)。无需一次将整个文件加载到内存中。
    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2018-09-16
    • 2023-01-13
    • 2021-02-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多