我创建了一个脚本,该脚本将在目标文件中搜索关键字。如果该关键字在文本的特定行上,它将获取整个文本,并返回不包含该关键字的其余行。例如,如果一行文本显示:
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)
答案 0 :(得分:0)
您的代码中存在两个问题:首先,您使用小写的icon
和title
,而文件包含大写的Icon
和Title
。字符串在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)