2014-09-29 34 views
-1

我正在尝试通过长文本文件进行搜索以找到短语所在的部分,然后在一列中打印短语并在另一列中打印另一个中的相应数据文本文件。我要找的短语是"Initialize All"。该文本文件将有成千上万行的 - 我要找的人会是这个样子:查找带有短语的行并打印该行的另一个部分

14-09-23 13:47:46.053 -07 000000027 INF: Initialize All start 

这是我在迄今为止 这里还是要打印三个单独的列:初始化所有,日期,时间

with open ('Result.txt', 'w') as wFile: 
    with open('Log.txt', 'r') as f: 
     for line in f: 
      if 'Initialize All' in line: 
       date, time = line.split(" ",2)[:2] 
       wFile.write(date) 
+1

你有什么企图解决这个问题? – 2014-09-29 22:02:31

+0

如果你知道初始化全部在行中,你为什么要打印它? – 2014-09-29 22:38:09

+0

我将合并其他短语,如“Uninitialize All”理想情况下,我将创建一个带有描述事件列的文档 - 使用日期和时间“初始化”或“uninitialize” – Catherine 2014-09-29 22:41:33

回答

0
with open('file.txt', 'r') as f: 
    for line in f: 
     if 'Inintialize All' in line: 
      # do stuff with line 
0
s = "14-09-23 13:47:46.053 -07 000000027 INF: Initialize All start" 
if "Initialize All" in s: # check for substring 
    date, time = s.split(" ",2)[:2] # split on whitespace and get the first two elements 
    print date,time 

14-09-23 13:47:46.053 

s.split(" ",2)2意味着maxsplit设置为2所以我们只是spli除了分割整个字符串以外,它还会分两次,s.split()[:2]也会工作,因为它默认情况下会在空白处分割,但由于我们只希望前两个子字符串没有分割整个字符串。

+0

谢谢,非常有帮助 - 你能解释2s的用法吗?每个代表什么? – Catherine 2014-09-29 22:13:58

+0

它是'maxsplit'm它意味着拆分两次,而不是拆分整个字符串,因为我们只想要前两个子字符串,所以没有将整个字符串拆分。 's.split()[:2]'也会工作,因为它在默认情况下会在空白处分割,但正如前面提到的那样,没有品脱分割整个字符串。 – 2014-09-29 22:15:16

+0

请考虑编辑答案以包含此额外信息。 – IanAuld 2014-09-29 22:48:28

0

您可以使用regex

lines=open('file.txt', 'r').readlines() 
[re.search(r'\d{2}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}',line).group(0) for line in lines: if 'Inintialize All' in line] 
+0

绝对没有理由需要一个正则表达式 – 2014-09-29 22:38:32

+0

我写了它,用于处理异常,例如,坏缩进或者可能在该行的前导中还有一些额外字符或... – Kasramvd 2014-09-29 22:42:59

相关问题