繁体   English   中英

使用重新和匹配,如何从文本文件中搜索和获取某些数据?

[英]Using re and matching, how can I search and get certain data from a text file?

我使用 re 和 matching 从文本文件中提取某些数据。 但是我在尝试使用类似技术获取特定数据时遇到问题。 继续卡住。 所以发布我用来获取我需要的行的代码。 详细信息在下面的代码末尾。 先感谢您!

来自文本文件的数据:

-------------------------------------------------------------------------------------------------------------------------------------
   1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  1  2  3  4  5  6  7
  SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO
 121               192                  175               158                  168                              BLK NO.  101 DYS OFF  17
 CVGORD X  X  X  X AVPDSMORD X  X  X  X GRBDSMORD X  X  X PIALEXORD X  X  X  X CHALEXORD X  X                   CRD.   72.00 BLK.  58.31
  121= 0910/1255/0901; 192= 0810/1915/1536; 175= 0750/1218/0931; 158= 0730/1240/1359; 168= 0758/1239/1638;      TAFB  245.09 C/O    0.0

代码:抱歉忘了从我的代码中添加 myDict[key] 已编辑

with open(filename, 'r') as f:
    count = 0
    for line in f:
        matchObj = re.match(dashes1, line)
        if matchObj:
            count += 1
            strcount =str(count)
            data = ['','','','']
            f.readline()
            f.readline()
            data[0] = f.readline()
            data[1] = f.readline()
            key = "myData"+strcount
            myDict[key] = data
f.close()   



for key in myDict:
    print(key, '->', myDict[key])

我的输出是:

myData1 -> [' 121               192                  175               158                  168                              BLK NO.  101 DYS OFF  17\n', ' CVGORD X  X  X  X AVPDSMORD X  X  X  X GRBDSMORD X  X  X PIALEXORD X  X  X  X CHALEXORD X  X                   CRD.   72.00 BLK.  58.31\n', '', '']

我想在BLK NO之后获取数据。 即 101,DYS OFF 后的数据为 17,对 CRD 依此类推。 72.00 和 BLK 的值。 值 58.31。

我不想打印 BLK NO.、DYS OFF、CRD。 也不是BLK。 只是他们之后的价值观。 我使用 re 和 matching 尝试了相同的方法,但我被卡住了。 提前感谢您的帮助!

我会让事情保持理智和简单,在将整个内容读入一个字符串后,只需在此处使用re.findall

inp = """-------------------------------------------------------------------------------------------------------------------------------------
1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30  1  2  3  4  5  6  7
SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO TU WE TH FR SA SU MO
121               192                  175               158                  168                              BLK NO.  101 DYS OFF  17
CVGORD X  X  X  X AVPDSMORD X  X  X  X GRBDSMORD X  X  X PIALEXORD X  X  X  X CHALEXORD X  X                   CRD.   72.00 BLK.  58.31
121= 0910/1255/0901; 192= 0810/1915/1536; 175= 0750/1218/0931; 158= 0730/1240/1359; 168= 0758/1239/1638;      TAFB  245.09 C/O    0.0"""

keys = ["BLK NO\.", "DYS OFF", "CRD\.", "BLK\.", "TAFB", "C/O"]
regex = "(" + "|".join(keys) + ")"
matches = re.findall(regex + r'\s+(\d+(?:\.\d+)?)', inp)
print(matches)

这打印:

[('BLK NO.', '101'), ('DYS OFF', '17'), ('CRD.', '72.00'), ('BLK.', '58.31'),
 ('TAFB', '245.09'), ('C/O', '0.0')]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM