我正在PyCharm中运行Python3.7,我想知道如何最好地打开和读取一个文本文件,该文件包含五个多语言学生及其语言的列表,然后,我想根据每个学生是否有特定的期望语言对他们进行分类。一些学生会说一种或多种所需的语言,但我只想根据以下内容列出他们的名字
1)说阿拉伯语的学生
2)不会说阿拉伯语但会说英语的学生
3)不会说阿拉伯语或英语但会说法语的学生
students.txt(班上有5名学生[未排序])
John Arabic,
Ron French,
John French,
Jane French,
Pat English,
John French,
Jane Arabic,
Pat Spanish,
Ron English,
Sarah French,
结果如下:
John Arabic
Jane Arabic
Pat English
Ron English
Sarah French
我已经玩了好几个小时了,还没来得及弄明白。我尝试了所有的方法,从循环列表到测试列表中是否有东西,嵌套if语句,以及基本正则表达式,但我运气不太好。欢迎提出任何建议
这是我想到的,但是正在工作
def clean_up():
final_list = []
no_list = []
with open('student.txt', "r") as infile:
for lines in infile.read().strip().splitlines():
line = lines.split()
if lines in final_list:
continue
if findwholeword(line[0], 1, 'Arabic', lines) != (None or
[]):
no_list.append(line[0])
final_list.append(lines)
elif findwholeword(line[0], 1, 'English', lines) != (None
or []):
if line[0] in no_list:
continue
elif line[0] not in no_list:
final_list.append(lines)
no_list.append(line[0])
else:
print("Issue at 'NO' statement")
elif findwholeword(line[0], 1, 'French', lines) != (None
or []):
if line[0] in no_list:
continue
elif line[0] not in no_list:
final_list.append(lines)
no_list.append(line[0])
else:
print("Issue at 'Error' statement.")
else:
print('Something went wrong!')
def findwholeword(w1, w2, w3, target):
return re.compile(r'\b{0}(?:\W+\w+){{0,{1}}}\W+{2}\b'.format(w1,
w2, w3), flags=re.IGNORECASE).search(target)
clean_up()
您可以使用defaultdict创建和语言到名称的映射,然后使用集合跳过已输出的名称:
输出:
这应该起作用:
不是最优的,但可能是这样的:
相关问题 更多 >
编程相关推荐