【问题标题】:Reading files line-by-line and searching for patterns in python逐行读取文件并在python中搜索模式
【发布时间】:2019-01-03 00:06:58
【问题描述】:

我正在逐行读取文件并存储信息,但有些行略有不同,需要整理一下。

我有一个 502 行的文本文件,类似于

VV item1 value1 item2 value2 itemA valA
VV item1 value1 item2 value2 itemB valB
...

我通过逐行读取文本来存储这些值,但各行之间存在差异。有时我有 itemB 而不是 itemA。我第一次尝试

ifn = open(afile,'r')
while 1:                                                                                                                                                                                                                                                                       
    l = ifn.readline() 
    print(int(l.split(' ')[1])) #prints value1 as expected
    if re.search('itemB', l):
            print(int(l.split(' ')[6]))

最后一条 print 语句不打印任何内容,尽管它假设并完全忽略了它。

那我也试了

ifn = open(afile,'r')
for i,l in enumerate(ifn):                                                                                                                                                                                                                                                           
        print( linecache.getline(ifn.name,i).split(' ')[1]) )

但它在执行 re.search 语句之前会打印一个空行。

我将不胜感激任何一种方法的帮助。

谢谢。

【问题讨论】:

  • 如果您正在寻找像itemB 这样简单的东西,您不妨使用if "itemB" in l: 而不是使用正则表达式
  • 在第一个代码变体中,您应该首先确定最后一行中的 print 是否真的没有打印任何内容(这对我来说似乎不可能)或者该行根本没有执行,因为if 条件始终为假。

标签: python regex search readline getline


【解决方案1】:

我怀疑是您的 while 循环 + readline() 导致了问题。如果您使用上下文管理器和 for 循环,此代码应该可以工作:

with open('test.txt','r') as file:                                                                                                                                                                                                                                             
    for line in file:
        if 'itemB' in line:
            print(line.split(' ')[5])

此外,您似乎正在尝试访问该行中的第 6 项 - 这意味着您需要使用索引 5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2018-06-10
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多