不使用regex在paranethes中获取多行数据

2024-04-29 04:15:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试以以下格式解析go元文件:

require (
    github.com/cheggaaa/pb v1.0.28
    github.com/coreos/go-semver v0.2.0 // indirect
    github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect
    github.com/dustin/go-humanize v1.0.0
    github.com/fatih/color v1.7.0
        ...
        )

如果不使用regexp,如何在括号和之间获取数据?(否则这个无意义的问题就根本不存在了)。我试过玩split(),但到目前为止失败了。你知道吗


Tags: 文件githubcomgo格式requiresemverpb
3条回答

这里有一个代码应该做到这一点。它将复制'requiree('和')'之间的所有行,只要这些块中没有其他')'。你知道吗

数据文件:

random stuff
require (
    github.com/cheggaaa/pb v1.0.28
    github.com/coreos/go-semver v0.2.0 // indirect
    github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e //indirect
    github.com/dustin/go-humanize v1.0.0
    github.com/fatih/color v1.7.0
        ...
        )



random stuff

输出文件:

github.com/cheggaaa/pb v1.0.28
github.com/coreos/go-semver v0.2.0 // indirect
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e //indirect
github.com/dustin/go-humanize v1.0.0
github.com/fatih/color v1.7.0
    ...

代码:

f = open('data', 'r')
f2 = open('out', 'w')

toggle = False

for line in f:
    if 'require (' in line:
        toggle = True
        continue
    if toggle:
        if ')' in line:
            toggle = False
        else:
            f2.write(line)

f.close()
f2.close()

您可以读取整个内容,将其拆分为单独的行,然后将第一行和最后一行切掉:

with open(metafile) as f:
    requirements = f.read().splitlines()[1:-1]

使用with打开文件可确保在作用域结束时正确关闭该文件。你知道吗

@rdas对[l.strip() for l in file.readlines()[1:-1]]的建议将在元文件的格式与您的示例相同的情况下起作用。但实际上,你应该用正则表达式。更简单。你知道吗

相关问题 更多 >