函数仅返回一次所需值

时间:2018-10-02 14:09:24

标签: python function file

我创建了一个脚本,该脚本将在目标文件中搜索关键字。如果该关键字在文本的特定行上,它将获取整个文本,并返回不包含该关键字的其余行。例如,如果一行文本显示:

Title: Useless Data

然后,脚本将仅使用表示“无用数据”的部分,并将其附加到列表中。它将对文件中出现“标题”一词的每个位置执行此操作。

如果只运行一次以从文件中获取多行并将其输出到列表中,则脚本成功,但是我想在文件中搜索两个关键词:标题和图标,然后将标题压缩为相应的图标。因此,如果我选择一行看起来像这样的文本:

LINE 1:
Title: Useless Data
Icon: Fairly upset programmer
Index: 12
filler data:
LINE 2:
Title: Line 2
Icon: Pancho
Index: 69
filler data:

输出应为:

list1 = ['Useless Data', 'Line 2']
list2 = ['Fairly upset programmer', 'Pancho']

然后我想将它们压缩成如下所示的字典:

final_dict = {'Useless Data' : 'Line 2', 'Fairly upset programmer': 'Pancho'}

title_list = {}
target_file = open('Meta.txt', 'r')

# Searches for word in a line and removes all the useless data
def splitter(files, word):
    output = []
    for line in files:
        if word in line:
            output.append(line.split(':')[1].replace('\n', '').strip())
        else:
            continue
    print(output)
    return output

split1 = splitter(target_file, 'icon')
split2 = splitter(target_file, 'title')
final = zip(split1, split2)

1 个答案:

答案 0 :(得分:0)

您的代码中存在两个问题:首先,您使用小写的icontitle,而文件包含大写的IconTitle。字符串在python中区分大小写,因此两者不相同。其次,在第一次调用函数读取文件的内容之后,由于下面的注释中@roganjosh指定的原因,第二次使用target_file无法正常工作。因此,您有许多其他选择中的两个:1)每次在函数中读取文件,或者2)使用files.seek(0)。两种解决方案都在下面提供。

title_list = {}

# Searches for word in a line and removes all the useless data
def splitter(word):
    target_file = open('Meta.txt', 'r')
    output = []
    for line in target_file:
        if word in line:
            output.append(line.split(':')[1].replace('\n', '').strip())
        else:
            continue

    target_file.close()
    return output

split1 = splitter('Icon')
split2 = splitter('Title')

final = dict([iter(split2), iter(split1)])
print (final)


{'Useless Data': 'Line 2', 'Fairly upset programmer': 'Pancho'}

@roganjosh使用files.seek(0)提出的替代解决方案

title_list = {}

target_file = 'Meta.txt'

# Searches for word in a line and removes all the useless data
def splitter(files, word):
    files.seek(0)
    output = []
    for line in target_file:
        if word in line:
            output.append(line.split(':')[1].replace('\n', '').strip())
        else:
            continue
    return output

with open(target_file) as infile:
    split1 = splitter(infile, 'Icon')
    split2 = splitter(infile, 'Title')
    final = dict([iter(split2), iter(split1)])
print (final)