我有下面的代码,对于textfile1中的每一行,搜索textfile2,如果该行包含在textfile2中,则打印出对应的textfile2行。但是,我想为textfile2中没有包含的每一行打印新行。以下是代码:
def readline():
with open("textfile1.txt") as file, open("textfile2.txt") as file2:
string = set(map(str.rstrip,file))
for line in file2:
spl = line.split(None, 1)[0]
if spl in string:
print(line.rstrip())
else: ##if spl not in string print new line
print("\n")它不像我所期望的那样工作(不打印任何新的行),问题是什么或任何替代的解决方案?
样本Textfile1:
'
a
aa
ab
abandon
abandonaudiofocus
abandonsession
abort
abortablehttprequest
abortanimation
abortcaptures
abortconnection
abortpolicy
abortrequest
abs样本Textfile2:
' | 22624
a | 91
aa | 7
ab | 6
abort | 8
abortanimation | 5
abs | 131
abslistview | 115
absolutelayout | 50
absolutesizespan | 6
abstracthttpentity | 2
abstractlist | 1
abstractmap | 4
abstractselector | 1
abstractset | 2Textfile1包含更多的单词,它包含了textfile2中的所有单词。
发布于 2015-08-12 10:48:28
根据你的问题-
对于textfile1中的每一行,搜索textfile2,如果该行包含在textfile2中,则打印出对应的textfile2行
以及评论-
Textfile1包含了更多的单词,它包含了textfile2中的所有单词
你现在的逻辑--如果实际上是相反的话,它会检查file2 - textfile2.txt中的每一行--这一行的第一部分是否存在于file - textfile1.txt中--根据您的评论,这始终是正确的。
您需要在集合中获取file2的所有元素(每一行的第一部分),然后检查file的每一行。例子-
def get_first(line):
return line.split(None, 1)[0]
def readline():
with open("textfile1.txt",'r') as file, open("textfile2.txt",'r') as file2:
string = set(map(get_first,file2))
file2.seek(0)
file2_dict = {}
for line in file2:
file2_dict[line.split(None, 1)[0]] = line
for line in file:
if line.strip() in string:
print(file2_dict[line.rstrip()])
else: ##if spl not in string print new line
print()另外,在其他部分中,您不需要在您的"\n"中使用print(),而打印本身也会放置一个换行符,您可以做- print()来打印换行符。
示例/演示-
>>> def get_first(line):
... return line.split(None, 1)[0]
...
>>> def readline():
... with open("a.txt",'r') as file, open("b.txt",'r') as file2:
... string = set(map(get_first,file2))
... for line in file:
... if line.strip() in string:
... print(line.rstrip())
... else: ##if spl not in string print new line
... print()
...
>>> readline()
a
aa
ab
abort
abortanimation
abs在上面的示例中,a.txt包含来自示例textfile1.txt的数据,b.txt包含来自textfile2.txt示例的数据。
发布于 2015-08-12 12:15:39
对于textfile2中的每一行,在textfile1中搜索其第一部分,如果该行包含在textfile2中,则打印出对应的textfile2行。
def readline():
file1_list = [line.rstrip() for line in open("textfile1.txt")]
file2_list = [line.rstrip() for line in open("textfile2.txt")]
fileo_list = [line if line.split(None, 1)[0] in file1_list else '' for line in file2_list]
for line in fileo_list:
print(line)这将打印出来:
' | 22624
a | 91
aa | 7
ab | 6
abort | 8
abortanimation | 5
abs | 131
.....发布于 2015-08-13 23:40:50
集合让这件事变得很简单
with open("textfile1.txt") as file1:
textfile_1_set = set(map(str.rstrip, file1))
with open("textfile2.txt") as file2:
textfile_2_set = set([l.split()[0] for l in file2])
# remove all the lines that are in textfile2 from the
# set of lines from textfile1
in_1_but_not_2 = textfile_1_set - textfile_2_set
for line in in_1_but_not_2:
print linehttps://stackoverflow.com/questions/31962097
复制相似问题