2016-08-01 52 views
0

文本文件,我有这个文本文件:搜索词Python中

MemTotal,5,2016-07-30 12:02:33,781 
model name,3,2016-07-30 13:37:59,074 
model,3,2016-07-30 15:39:59,075 

我需要找到与模型线。

我的代码:

term = "model" 
file = open('file.txt') 
for line in file: 
    line.strip().split('/n') 
    if term in line: 
     print line 
file.close() 

这是输出:

model name,3,2016-07-30 13:37:59,074 
model,3,2016-07-30 15:39:59,075 

我只需要这一行作为输出:

model,3,2016-07-30 15:39:59,075 

我怎样才能做到这一点?

+0

'项=“模式,”'反正这取决于它是否是一个一般的情况下,或特定的一个 – Samuel

+2

'line.strip ().split('/ n')'什么都不做。 “strip”和“split”不适用。 –

回答

2

只需更换行:

if term in line: 

符合:

if line.startswith('model,'): 
+0

只是一个小问题。这家伙说,他需要找到“模型”。如果它介于两者之间呢?然后,根据OP给出的示例数据,您的代码将失败 –

+0

@sameerasy,这是一个正确的答案。 –

+0

是的,如果它不在一开始就会失败。但基于提供的示例数据,它似乎是一些日志文件,它总是像这样开始。 – grubjesic

1

这取决于你的文件中包含。你举的例子是很轻,但我看到了几个直接的解决方案,不改变你的代码太多:

  1. 更换由term = 'model,'term = 'model',这将只显示你想要的行。

  2. 使用一些附加条件,如“不得包含'name'

像这样:

term = 'model' 
to_avoid = 'name' 
with open('file.txt') as f: 
    for line in file: 
     line = line.strip().split('/n') 
     if term in line and to_avoid not in line: 
      print line 

其他的看法

  • 你可以使用startswith('somechars')检查字符串开头的某些字符
  • 您需要在变量中指定strip()split(\n)的结果,否则不会发生任何事情。
  • 这也是更好地使用关键字with,而不是打开/关闭文件
  • 一般情况下,我想你会与这种类型的东西,你正在做的正则表达式得到更好的服务。然而,正如Nander Speerstra的comment指出的那样,这可能是危险的。
+0

感谢它的工作 –

+1

对'line = line.strip()'行以及'with'的使用有很好的解释。但是[**当不必要时使用正则表达式**](http://programmers.stackexchange.com/a/113243/239397)。 –

+0

确实。我已经编辑来警告OP。 – BusyAnt

1

您可以通过,分割线和检查第一场:

term = "model" 
file = open('file.txt') 
for line in file: 
    line = line.strip().split(',') # <--- 
    if term == line[0]:    # <--- You can also stay with "if term in line:" if you doesn't care which field the "model" is. 
     print line 
file.close()