从文本文件中解析数据

2023-11-25

我有一个文本文件,其内容如下:

******** ENTRY 01 ********
ID:                  01
Data1:               0.1834869385E-002
Data2:              10.9598489301
Data3:              -0.1091356549E+001
Data4:                715

然后是一个空行,并重复更多类似的块,所有块都具有相同的数据字段。

我正在将 C++ 代码移植到 Python,某些部分逐行获取文件,检测文本标题,然后检测每个字段文本以提取数据。这看起来根本不像一个智能代码,我认为 Python 必须有一些库来轻松解析这样的数据。毕竟,它看起来几乎像 CSV!

有什么想法吗?


实际上,它与 CSV 相差甚远。

您可以将该文件用作迭代器;以下生成器函数生成完整的部分:

def load_sections(filename):
    with open(filename, 'r') as infile:
        line = ''
        while True:
            while not line.startswith('****'): 
                line = next(infile)  # raises StopIteration, ending the generator
                continue  # find next entry

            entry = {}
            for line in infile:
                line = line.strip()
                if not line: break

                key, value = map(str.strip, line.split(':', 1))
                entry[key] = value

            yield entry

这会将文件视为迭代器,这意味着任何循环都会将文件前进到下一行。外环仅用于从一个部分移动到另一个部分;内在的while and for循环完成所有实际工作;首先跳过行直到****找到标头部分(否则丢弃),然后循环所有非空行以创建一个部分。

在循环中使用该函数:

for section in load_sections(filename):
    print section

在文本文件中重复示例数据会导致:

>>> for section in load_sections('/tmp/test.txt'):
...     print section
... 
{'Data4': '715', 'Data1': '0.1834869385E-002', 'ID': '01', 'Data3': '-0.1091356549E+001', 'Data2': '10.9598489301'}
{'Data4': '715', 'Data1': '0.1834869385E-002', 'ID': '01', 'Data3': '-0.1091356549E+001', 'Data2': '10.9598489301'}
{'Data4': '715', 'Data1': '0.1834869385E-002', 'ID': '01', 'Data3': '-0.1091356549E+001', 'Data2': '10.9598489301'}

如果需要,您可以添加一些数据转换器;键到可调用的映射可以:

converters = {'ID': int, 'Data1': float, 'Data2': float, 'Data3': float, 'Data4': int}

然后在生成器函数中,而不是entry[key] = value do entry[key] = converters.get(key, lambda v: v)(value).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从文本文件中解析数据 的相关文章

随机推荐

  • i386 架构的未定义符号:“_utf8_nextCharSafeBody”,引用自:”

    如何清除这个错误 请帮助我 我不知道套接字过程 i386 架构的未定义符号 utf8 nextCharSafeBody 引用自 SRWebSocket o 中的 validate dispatch data partial string l
  • __path__ 有什么用?

    我从来没有注意到 path 今天之前在我的一些包上定义的属性 根据文档 套餐支持多一特价 属性 path 这是 初始化为一个列表 其中包含 保存目录的名称 包的 init py代码之前 在该文件中被执行 这 变量可以修改 这样做 影响未来对
  • Delphi Statictext字体颜色变化无样式

    我想将 StaticText 字体颜色从黑色更改为clBlue 我该怎么办 目前我正在做 StaticText Font Color clBlue 但这对颜色没有影响 我能做些什么 谢谢 The TStaticText控件是 Win32 的
  • 损坏的 Java Mac 10.6

    一些背景 在 Mac OS X 10 6 上使用 Macports 我有DYLD LIBRARY PATH在我的 bash profile 中设置 问题 当我跑步时java version我收到此错误 VM初始化期间发生错误无法加载本机库
  • 前导美元符号如何影响 Bash 中的单引号?

    我需要从 Bash CLI 将字符串作为其参数传递给程序 例如 program don t do this 该字符串可以包含任何字符 例如 等等 我不希望 Bash 做任何修改 所以我考虑使用单引号 但是以下方法不起作用 program d
  • Maven Javascript 压缩器

    我想知道如何使用 maven 压缩 javascript 文件 我已经访问过类似的网站http mojohaus org javascript maven tools guide webapp development html但没有解释实施
  • iPhone 企业部署:移动设备管理

    我在企业中阅读有关 iPhone 的资料 看到了一些有关移动设备管理服务器的内容 据我所知 有一些第 3 方 MDM 供应商 但 Apple 表示可以实施自己的供应商 iPhone 配置实用程序允许您为 MDM 设置服务器 URL 签入 U
  • PHP 正则表达式和 JavaScript 正则表达式之间的区别

    您好 我想在 spry java 脚本框架中使用下面的 php 正则表达式 但它们不适用于 spry 框架 并且 spry 不允许用户输入 1 d 2 x 600 x 6FF s x 600 x 6FF u 3 x 600 x 6FF d
  • 如何跟踪 Javascript 事件(堆栈跟踪)?

    在任何编程语言中 我都可以跟踪任何函数并知道哪个函数被其他函数调用 但在 Javascript 中 我不知道如何 因为代码不是我写的据我所知 Firebug 没有提供此功能 一个例子 我想显示单击 XYZ 元素时调用的每个函数的函数名称 并
  • 使用 Lambda 和递归函数调用了解 QTimer

    我有以下代码 void class Testfunc QTimer timer new QTimer QObject connect timer QTimer timeout this emit Log Time out TestFunc
  • 如何在 Twig 过滤器“替换”中使用变量

    从 php 的表单中移交一个数组 repl arr array serach string1 gt replace1 对于 Twig 模板 我想在每个替换过滤器中替换 Twig 变量中的字符串 如下所示 block replace repl
  • Excel 和 EPPlus .NET 库:高级下拉列表验证

    在 Epplus 中 当我们为 Excel 文件中的某些单元格创建下拉列表时 然后用户输入一个不属于列表的值 该单元格会显示一条消息 值必须与列出的项目之一匹配 除了此消息之外 是否可以阻止用户输入不属于下拉列表的值 提前致谢 我用下面的代
  • 使用陈述问题

    我有两个问题 1 是否应该始终在连接上使用 using 语句 那么 我会在连接上使用它 然后在连接内的阅读器上使用另一个吗 所以我会使用两个 using 语句 2 假设您在连接上使用 using 语句 并且在连接上返回了一个读取器 所以你有
  • Perl 中的核心、供应商和站点位置之间有什么区别?

    我最近在安装某些模块时遇到了一些麻烦 并惊讶地发现许多已安装的模块都有重复的安装和版本 尝试使用以下命令跟踪标准 如果有这样的东西 安装中的内容cpanm 我发现以下结果非常令人困惑 报告显示了这些位置 Using cpan V cpan
  • 开发过程中应该如何使用identifierForVendor?

    Apple 建议使用 UIDevice currentDevice identifierForVendor 每次在 iOS 模拟器中运行应用程序时 该值都会发生变化 我的应用程序中的初始功能要求我将设备识别为一种光身份验证形式 这使得开发变
  • django-tastypie 和多对多“通过”关系

    在 Django 和 Tastypie 中 我试图找出如何正确处理多对多 通过 关系 如下所示 https docs djangoproject com en dev topics db models extra fields on man
  • 在 AngularJS 中,我可以在 ngView 之外的 ngSwitch 中使用当前路由吗

    我正在尝试根据当前视图更改页眉 标头位于 ngView 之外 这是可能的还是我需要将标题放在视图中 我的代码看起来与此类似 div div div Welcome div div Our products div div Contact u
  • 用逗号分割字符串列表

    我想转换 60 78 70 77 80 74 90 75 100 74 110 75 in to 60 78 70 77 etc 我以为我可以用 for word in lines word word split newlist appen
  • Yahoo 和 MS 支持 Oauth 2.0 吗?以及有关 oAuth 2.0 的几个问题

    我有几个问题 yahoo 和 microsoft api 支持吗 oAuth 2 0 如果是的话主要是什么 应采取的安全措施 转移时得到照顾 oAuth 1 0 到 oAuth 2 0 Google API 支持 oAuth 2 0 但 他
  • 从文本文件中解析数据

    我有一个文本文件 其内容如下 ENTRY 01 ID 01 Data1 0 1834869385E 002 Data2 10 9598489301 Data3 0 1091356549E 001 Data4 715 然后是一个空行 并重复更