【问题标题】:targeting words in a line of text在一行文本中定位单词
【发布时间】:2022-08-12 16:16:25
【问题描述】:

我在文本文件中确定了如下所示的一行:

FLAGS                    = WORD1 WORD2 WORD3

我正在阅读几个文件,其中的字数可以从 0 到最多 3 不等。

我正在使用此代码:

flag_FLAG = 0
for i in range(len(materialfile)):
    if  \"FLAG\" in materialfile[i] and \"=\" in materialfile[i]:
        line_FLAG = i
        flag_FLAG = 1
        
    if flag_FLAG == 1:
        
        temp = materialfile[line_FLAG].split(\" \")
        for elem in temp:
            if is_word(elem):
                flags = str(elem)

不幸的是,这样我只能得到一个字(最后一个)。 \"is_word\" 是我创建的一个函数:

def is_word(s):
    try:
        str(s)
        return True
    except ValueError:
        return False

我想将所有单词作为目标。 我希望我已经清楚了。

    标签: python string text-files readline targeting


    【解决方案1】:

    我是这样解决的:

    for i in range(len(materialfile)):
        if  "FLAGS" in materialfile[i] and "="  in materialfile[i]:
            line_flag = i
            flag_flag = 1
    if flag_flag == 1:
        flags = materialfile[line_flag].split(" = ")[1].split()
    

    我不知道这是否是一种优雅的方式,但它似乎有效。谢谢

    【讨论】:

    • 如果您有多个 FLAGS = ... 行,这似乎不起作用...
    • 请记住接受您自己的答案,除非您正在等待其他人发布不同的解决方案
    【解决方案2】:

    你想要一个嵌套循环,例如:

    materialfile = [
        "FLAGS                    = WORD1 WORD2 WORD3",
    ]
    
    flags = [
        flag
        for line in materialfile if "FLAGS" in line and "=" in line
        for flag in line.split(" = ")[1].split() if flag
    ]
    
    print(flags)  # ['WORD1', 'WORD2', 'WORD3']
    

    很难说这个确切的代码是否适用于您的实际文件,因为您没有提供示例文件,但希望这能让您指出正确的方向。

    请注意,您的 is_word 函数什么都不做,因为它们已经是字符串,因此将始终转换为 str() 作为无操作而不引发异常。上述理解中的if flag 将过滤掉flag 的空值(例如,如果您有类似FLAGS = 的行)。

    【讨论】:

    • 不幸的是,该文件包含其他行,我无法使您的脚本适应前一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2023-03-23
    • 1970-01-01
    • 2018-08-26
    相关资源
    最近更新 更多