我的代码存在问题: 一切都运作良好,但只有比较
for hosts in s:
for line in fin:
if hosts==line:
print line
这不起作用,不会在cmd上输出任何内容。
import os.path
import sys
'''////if not enouth suffix in the code////'''
if len(sys.argv)<2:
print "Please write %s <FileLocation> <hostname1> <hostname2> " % sys.argv[0]
sys.exit(1)
'''////check if the file is exist in the dir////'''
filelocation = sys.argv[1]
if os.path.exists(filelocation) == False:
print "File dosnt exist please write after %s <exist file> " % sys.argv[0]
sys.exit(1)
'''////compare from the sys.argv to the file////'''
with open(filelocation,"r") as fin:
s = set(sys.argv[2:])
for hosts in s:
for line in fin:
if hosts==line:
print line
答案 0 :(得分:0)
问题是ch := make(chan bool, 10)
for i := 0; i < 10; i++ {
go foo(i, ch)
}
flg := false
for i := 0; i < 10; i++ {
if <-ch {
flg = true
break
}
}
在文本文件的行尾包含换行符(line
)。
使用\n
删除这些内容。
str.strip()
答案 1 :(得分:0)
第一个问题:您必须从文件内容中删除空格和换行符。第二个问题:一旦第一个问题得到纠正,你就会发现内循环只是为第一个外循环执行,因为在第一个外循环之后你已到达文件的末尾,所以没有任何东西留给它
除非您的文件非常庞大,否则最好的解决方案是首先将其设置为集合,然后使用set操作来获取交集:
s1 = set(sys.argv[2:])
with open(filelocation) as fin:
s2 = set(filter(None, (line.strip() for line in fin)))
print "\n".join(s1 & s2)
如果你期望巨大的文件,那么你将不得不反转循环:
s = set(sys.argv[2:])
with open(filelocation) as fin:
for line in fin:
line = line.strip()
if line in s:
print line
这可以避免耗尽文件,并且也更有效,因为设置查找是O(1)(而不是使用当前算法的O(N))。