首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中打开一个文件,读取注释("#"),在注释后找到一个单词,然后选择它后面的单词?

如何在python中打开一个文件,读取注释("#"),在注释后找到一个单词,然后选择它后面的单词?
EN

Stack Overflow用户
提问于 2019-01-30 20:40:23
回答 3查看 1.2K关注 0票数 1

我有一个函数,它循环遍历一个如下所示的文件:

代码语言:javascript
运行
复制
"#" XDI/1.0 XDAC/1.4 Athena/0.9.25

"#" Column.4:                      pre_edge

Content

也就是说,在"#“之后有一个评论。我的函数的目标是读取每一行,如果它以特定的单词开头,请选择":“后面的内容。

例如,如果我有这两行。我想阅读它们,如果行以"#“开头,并包含单词"Column.4”,则应该存储"pre_edge“一词。

下面是我目前做法的一个例子:

代码语言:javascript
运行
复制
with open(file, "r") as f:
        for line in f:
            if line.startswith ('#'):
                word = line.split(" Column.4:")[1]
            else:
                print("n")

我想我的麻烦是在找到以"#“开头的一行之后,我如何解析/搜索它呢?并保存它的内容,如果它包含需要的词。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-30 21:03:48

如果#注释中包含如上所述的str Column.4:,您可以这样解析它。

代码语言:javascript
运行
复制
with open(filepath) as f:
    for line in f:
        if line.startswith('#'):
            # Here you proceed comment lines
            if 'Column.4' in line:
                first, remainder = line.split('Column.4: ')
                # Remainder contains everything after '# Column.4: '
                # So if you want to get first word ->
                word = remainder.split()[0]
        else:
            # Here you can proceed lines that are not comments
            pass

备注

另外,使用for line in f:语句代替f.readlines() (正如其他答案中提到的那样)也是一个很好的实践,因为这样您不会将所有行加载到内存中,而是一个接一个地处理它们。

票数 2
EN

Stack Overflow用户

发布于 2019-01-30 20:55:40

首先,您应该将文件读入列表中,然后进行如下操作:

代码语言:javascript
运行
复制
file = 'test.txt' #<- call file whatever you want
with open(file, "r") as f:
    txt = f.readlines()
    for line in txt:
        if line.startswith ('"#"'):
            word = line.split(" Column.4: ")
            try:
                print(word[1])
            except IndexError:
                print(word)
        else:
            print("n")

输出:

代码语言:javascript
运行
复制
>>> ['"#" XDI/1.0 XDAC/1.4 Athena/0.9.25\n']
>>> pre_edge

使用了try和except,因为第一行也是以"#“开头的,我们不能用当前的逻辑来分割它。

另外,作为附带说明,在这个问题中,文件的行以"#“开头,引号为”#“,因此startswith()函数被修改为这样。

票数 1
EN

Stack Overflow用户

发布于 2019-01-30 21:07:19

代码语言:javascript
运行
复制
with open('stuff.txt', 'r+') as f:
    data = f.readlines()

for line in data:
    words = line.split()
    if words and ('#' in words[0]) and ("Column.4:" in words):
        print(words[-1])

# pre_edge
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54449176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档