如何使用Python从文件中解析/提取特定数据

时间:2014-07-23 19:40:51

标签: regex parsing python-2.7 lua slice

我有一个有趣的问题,我试图解决,我已经采取了很好的尝试,但需要一些帮助。我有一个软弱的文件,其中包含一些lua代码。我正在尝试读取此文件并从中构建文件路径。但是,根据生成此文件的位置,它可能包含某些信息,或者可能会遗漏某些信息。这是我需要解析的软文件的一个例子。

Module "foo1"
Module "foo2"
Module "common.command" "common/command.lua"
Module "common.common" "common/common.lua"
Module "common.diagnostics" "common/diagnostics.lua"

这是我编写的用于读取文件并搜索包含Module的行的代码。您将看到此文件有三个不同的部分或列。如果你看第3行,你会得到"模块"对于column1," common.command"对于column2和" common / command.lua"对于column3。

以Column3为例......如果第3列中存在数据,那么我只需要关闭引号并获取Column3中的数据。在这种情况下,它将是常见的/ command.lua。如果Column3中没有数据,那么我需要从Column2中获取数据并用os.path.sep替换句点(。),然后在文件上添加.lua扩展名。再次,使用第3行作为示例,我需要拔出common.common并使其成为common / common.lua。

    squishyContent = []
    if os.path.isfile(root + os.path.sep + "squishy"):
        self.Log("Parsing Squishy")
        with open(root + os.path.sep + "squishy") as squishyFile:
            lines = squishyFile.readlines()
        squishyFile.close()

        for line in lines:
            if line.startswith("Module "):
                path = line.replace('Module "', '').replace('"', '').replace("\n", '').replace(".", "/") + ".lua"

只需要一些示例/帮助来完成此操作。

1 个答案:

答案 0 :(得分:0)

这可能听起来很愚蠢,但最简单的方法是将您告诉我们的有关您的任务的所有内容转换为代码。

for line in lines:
    # if the line doesn't start with "Module ", ignore it
    if not line.startswith('Module '):
        continue

    # As you said, there are 3 columns. They're separated by a blank, so what we're gonna do is split the text into a 3 columns.
    line= line.split(' ')
    # if there are more than 2 columns, use the 3rd column's text (and remove the quotes "")
    if len(line)>2:
        line= line[2][1:-1]
    # otherwise, ...
    else:
        line= line[1] # use the 2nd column's text
        line= line[1:-1] # remove the quotes ""
        line= line.replace('.', os.path.sep) # replace . with /
        line+= '.lua' # and add .lua
    print line # prove it works.

有了这样一个简单的问题,如果你手动完成任务,很容易让程序完全按照你自己的意思完成。