Python - 获取txt文件的一部分并将它们放在另一个txt中

时间:2014-11-24 22:17:44

标签: python regex

我有一个大文件,语法如下:

Object 1:
[Useless Data]
com_pos = number number number
[Useless Data]

Object 2:
[Useless Data]
com_pos = number, number, number
[Useless Data]
...
and so on (there's a very large number of objects.).

我想要做的是选择数字并将它们放入另一个具有特定格式的txt文件中(每个对象基本上是一行,每个数字都有一列)。

问题是我对每个对象都有相同的com_pos =。 我该怎么办?我应该使用正则表达式吗?

2 个答案:

答案 0 :(得分:0)

您必须为此编写某种类型的解析器。如果您不理解它们,则不需要使用正则表达式。例如,给出两个例子,这也可以起作用:

with open(path) as f:
    for line in f:
        columns = line.split()
        if columns[0] == 'com_pos' and columns[1] == '=':
            numbers = [float(column.rstrip(',')) for column in columns[2:]]
            # do something with numbers

使用正则表达式可以使事情更紧凑,更高效或更强大。例如,考虑一下:

r = re.compile(r'com_pos\s*=\s*(\d+),?\s*(\d+),?\s*(\d+)')
with open(path) as f:
    for line in f:
        m = r.search(line)
        if m:
            numbers = [float(group) for group in m.groups]
            # do something with numbers

这可能会运行得更快,面对变量输入(数据格式有时会有逗号,有时看起来不像人类编写的文件......)更加强大,如果你理解它会更简单正则表达式。但如果你不这样做,那就很难维持。


com_pos\s*=\s*(\d+),?\s*(\d+),?\s*(\d+)

Regular expression visualization

Debuggex Demo

答案 1 :(得分:0)

您可以使用以下内容:

with open ('first_file' ,'r') as f1 and open('second_file' ,'w') as f2 :
 for line in f1.readlines() :
    if 'com_pos' in line :
       f2.write(line.split('=')[1])

首先,您需要找到com_pos所在的行,然后您可以使用=拆分该行,并写入第二个已拆分的元素,即第二个文件中的数字。