【问题标题】:Read data from txt file from a specific pattern in text从文本中的特定模式读取 txt 文件中的数据
【发布时间】:2021-08-07 00:37:08
【问题描述】:

在找到特定单词后,我需要从文本文件中将数据提取到数据框中 下面是一个文本文件的例子:

Signal:
197 198 180 140 
X_values:
11  26  8   15  
14  17  12  10  
** Exe Trs:
[115] time1: 1 (42 ms) - tou(): 4.7 - JH: 5 (B: 0)
[230] time2: 2 (87 ms) - tou(): 3.0 - Am: 5 (B: 0)

我想要的是创建两个数据框,如下所示:

df1: 
    Signal  X_values1  X_values2
    197     11       14
    198     26       17
    180      8       12
    140     15       10

df2:
order   time(ms) 
115      42
230      87

【问题讨论】:

  • 与您的想法相反,Stackoverflow 不是免费的编码服务,也不是要取代现有的教程或文档。您应该发送honest attempt at the solution,然后然后在必要时询问有关它的具体问题。
  • 分解问题。查看文件以查看它是否具有可预测的结构。然后搜索使用具有结构的文本文件。您可能希望将文件的某些部分放入列表中,也许将它们清理干净,然后将它们加入一个框架中。如果文件长度很短,您可以使用相当简单的正则表达式。如果文件真的很长,您可能需要提取块并单独处理它们。 SO 不是来为您编写代码的,但作为一些值得深思的东西并知道一些事情是可行的,请参阅这个不完整的示例:ideone.com/13nMht

标签: python pandas dataframe


【解决方案1】:

如果您的文件始终遵循相同的字段顺序,一个快速的解决方案是使用正则表达式。如果你想要更高效/更健壮的东西,你需要编写一个自定义解析器。

import re
import numpy as np
import pandas as pd

with open('your_file', 'r') as f:
    text = f.read()
    
signal, values, exec_t = re.search('Signal:\n([\d ]+)\nX_values:\n([\d\n ]+)\n\*\* Exe Trs:\n([\w\W]*)',
                                   text).groups()

signal = re.split('\s+', signal.strip())
values = re.split('\s+', values.strip())
exec_t = re.findall('\[(\d+)][^(]+\((\d+) ms', exec_t)

df1 = pd.DataFrame(np.array(values).reshape(-1, len(signal)).T,
                   index=signal,
                   columns=['X_values%s' % (i+1) for i in range(len(values)//len(signal))]
                  ).rename_axis('Signal').reset_index()

df2 = pd.DataFrame(exec_t, columns=['order', 'time(ms)'])

输出:

>>> df1
  Signal X_values1 X_values2
0    197        11        14
1    198        26        17
2    180         8        12
3    140        15        10

>>> df2
  order time(ms)
0   115       42
1   230       87

【讨论】:

  • 虽然我想投反对票,但我没有投反对票,因为回答这样的问题只会增加出现更多问题的可能性……而且已经绰绰有余了。
  • @martineau 快速浏览该用户的其他问题给我的感觉是,虽然不是很擅长提问,但这仍然是一个合法用户。我认为我们无法针对措辞不佳的问题做任何事情,但我们可以尝试将它们变成有用的答案(这也是您在编辑问题以使其变得更好时所做的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多