【问题标题】:Parse and Print out the atttribute values from a text file using Python 3.2使用 Python 3.2 解析并打印文本文件中的属性值
【发布时间】:2012-06-20 15:34:45
【问题描述】:

我刚开始使用/学习 Python 并且有一些问题。

我有一个由报告工具生成的文本文件。 该文件包含一些这样的东西。有很多东西基本上遵循与下面写的相同的格式。

格式= {
Window_Type="表格",
表格= { Num_row_labels=5 } }

此文件中有命名值属性。 例如,Window_Type 是具有值 Tabular 的属性的名称。 同样,对于 Tabular 命名属性,其关联值为 5。

我想做的是打开文件。

  1. 检查 Window_Type 是否为表格
  2. 如果是,则检查与 Tabular 关联的 Num_row_labels。
  3. 如果 Num_row_lables 的值大于或等于 5,则打印文本文件的名称和该文件所在文件夹的路径。

我在 Eclipse 3.7.2 IDE 中使用 Python 3.2。

对于测试部分,我在 IDE 中导入了我的文本文件,并使用下面的代码来读取文件。将来我应该能够遍历扩展名为 mrk 的文件所在的文件夹。(这将是一个已知目录,因为我们将这些文件保存在其中。)请帮帮我。非常感谢!

import os.path
fn = os.path.join(os.path.dirname(__file__), 'Multitab.mrk')
with open(fn, 'r') as file: 
    print(file.read())

【问题讨论】:

    标签: python file-io python-3.x


    【解决方案1】:

    请注意,这个答案是一个非常肮脏的黑客。该格式几乎类似于 JSON 格式,这促使我编写了一个 RE 来转换字符串,以便它可以被 json 解析器干净地解析。这就是我所做的:

    import re
    import json
    
    s = """Format= {
    Window_Type="Tabular",
    Tabular= { Num_row_labels=5 } }"""
    
    s = "{" + re.sub(r'([a-zA-Z0-9_]+)=',r'"\1":', s) + "}"
    obj = json.loads(s)
    
    if obj['Format']['Window_Type'] == "Tabular":
        print "Its tabular!"
        numrows = obj['Format']['Tabular']['Num_row_labels']
        print "Numrows:", numrows
        if numrows >= 5:
            print "Print this fileName"
    

    输出:

    Its tabular!
    Numrows: 5
    Print this fileName
    

    【讨论】:

    • 感谢 Thrustmaster(图马思特)的 i/p。我可以得到像你这样的o/p。但我想打印我的文件名 Multitab.mrk。谢谢。
    • 应该很简单。列出当前目录中的每个 *.mrk 文件,每个文件都按照上面的方法,如果条件有效则打印文件名。
    • 感谢 Thrustmaster。你那肮脏的小技巧确实对我有用。 :) 我可以遍历指定目录中带有 ext .mrk 的所有文件,这很好。但是我必须遍历目录中的所有子目录。例如,我有一个名为 E:\ABCD 的目录,在 ABCD 目录中我有子目录 E:\ABCD\A、E:\ABCD\B、E:\ABCD\C 和 E:\ABCD\D。我需要遍历每个子目录中的所有文件。有什么想法吗?谢谢。
    • 使用os.walk 获取嵌套在子目录中的文件。
    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 2022-01-17
    • 2012-08-09
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多