通过python仅从txt文件中提取特定文本

通过python仅从txt文件中提取特定文本,python,parsing,text,Python,Parsing,Text,我有一个文本文件,其中包含以下变量及其值 COM 0.95958 eh 26.9817 ehc 26.9817 ehoff 0 ew 0.181982 ewoff -0.00400919 oeh 429.788 sp_icr 15.3199 sp_il -11.4382 sp_pdelay -1.53578e-09 sp_pk_icr 15.0735 sp_pk_icr_f 7.81609e+09 sp_pk_il -12.2937 sp_pk_il_f 7.71

我有一个文本文件,其中包含以下变量及其值

COM 0.95958  eh 26.9817  ehc 26.9817  ehoff    0  ew 0.181982  ewoff -0.00400919  oeh 429.788  sp_icr 15.3199  sp_il -11.4382  sp_pdelay -1.53578e-09  sp_pk_icr 15.0735  sp_pk_icr_f 7.81609e+09  sp_pk_il -12.2937  sp_pk_il_f 7.71614e+09  sp_pk_ild 3.05223  sp_pk_ild_f 7.3963e+08  sp_pk_rxrl -0.0909508  sp_pk_rxrl_f 3.01849e+09  sp_pk_txrl -6.33623  sp_pk_txrl_f 6.5967e+08  sp_rxrl -0.187543  sp_txrl -19.2629 
如何仅提取特定变量及其对应值?如何提取sayCOM及其值以及ehc及其值

for filename in glob.glob(os.path.join(path, '*.log')):
with open(filename, 'rt') as in_file:
    str = in_file.readline()
阅读完每一行后,我该如何继续?
我知道我可以使用子字符串并只提取所需的文本,但有没有其他方法可以这样做

我假设文件中的字符串是“ascii名称后跟类似浮点的数字”的重复模式,以空格分隔。因此,使用正则表达式解析字符串很方便

import re

s = "COM 0.95958  eh 26.9817  ehc 26.9817  ehoff    0  ew 0.181982  ewoff -0.00400919  oeh 429.788  sp_icr 15.3199  sp_il -11.4382  sp_pdelay -1.53578e-09  sp_pk_icr 15.0735  sp_pk_icr_f 7.81609e+09  sp_pk_il -12.2937  sp_pk_il_f 7.71614e+09  sp_pk_ild 3.05223  sp_pk_ild_f 7.3963e+08  sp_pk_rxrl -0.0909508  sp_pk_rxrl_f 3.01849e+09  sp_pk_txrl -6.33623  sp_pk_txrl_f 6.5967e+08  sp_rxrl -0.187543  sp_txrl -19.2629 "
r = re.compile(r'(\w+)\s+(-?\d+(?:\.\d+)?)')       # into 2 groups

d = dict(r.findall(s))
print(d)                   # {'sp_pk_icr_f': '7.81609', 'COM': '0.95958', ...
print(d['COM'])            # 0.95958 (but it is str)
print(float(d['COM']))     # 0.95958
我没有像字符串一样将float转换为float。如果您需要它,只需
尝试:float(d[键])

  • 如果文件有多行但属性保持不变,请替换所有换行符,如
    s=open(file\u NAME).read()。替换('\n','')
  • 如果“variable name”表示非数字开头字母,则将变量名称的regex部分替换为
    ([a-zA-Z]\w*)
如果有多个文件,并且希望将所有映射保持在一起,只需更新dict即可

d = {}
for fn in filenames:
    s = open(fn, 'r').read()
    d.update(r.findall(s))

现在,d从所有文件中都有var值对。

所有内容都在一行中,还是用\n或\t分隔?此外,您希望如何提取值…作为元组?作为单独的变量?它们都在一行中。哪一个更好?我需要将提取的这些值转储到excel工作表中,并在后面用逗号分隔。谢谢!如果我必须从文件夹中的10个文件中读取相同的内容,我将如何修改此内容?如果我可以通过聊天或其他方式与您联系,是否可以?关于这一点,我还有其他一些疑问?@Potato这里似乎没有聊天系统?如果有聊天系统,你仍然可以发表评论。让我创建一个:)@Potato没问题