我正在寻找一些关于我的代码的帮助,这是一个简单的python代码,但我是新手,所以这对我来说有点棘手..
我想要做的只是获取.txt文件,读取它并将其与某些字符串进行比较,并说出.txt文件中哪些字段没有我要求的字符串,例如:
txt文件: A B C D AABC DDCA CDAA CDAB EEGF GFFE
我的字符串限制: S = ['AA','BB','CC',DD']
所以输出应该是这样的: A B C D CDAB EEGF GFFE
其他的无法显示,因为它们与S中的一个或多个字符串匹配。 现在,我的代码和我的问题。
我有以下代码:
import string
ins = open( "prueba.txt", "r" )
array = []
for line in ins:
array.append( line )
ins.close()
s = ''.join(array)
a= s.split()
c = ['AA', 'BB','CC', 'DD','EE', 'FF','GG', 'HH','II', 'JJ','KK', 'LL', 'MM', 'NN','OO', 'PP','QQ', 'RR','SS', 'TT','UU', 'VV', 'WW', 'XX','YY', 'ZZ']
i=0
j=0
f= c[j]
for j in range(0,len(a)):
if a[i].find(f) != -1:
print 'Is in:' , a[i]
i=i+1
else:
print 'Is not in:' , a[i]
i=i+1
以下txt文件: AAC ABC ACC 加 FAA
我的输出是: 在:AAC 不在:ABC 不在:ACC 不在:ADD 在:FAA
我从中可以看出,我的代码并没有迭代它应该如何,所以它没有打印出正确的答案。
我一直在尝试很多东西来解决它,但我无法解决问题,所以如果有人能帮助我,我会非常感激!
非常感谢!
答案 0 :(得分:3)
您可以通过避免使用显式循环索引编写相当紧凑的代码,并使用find
将调用替换为in
:
$ cat t.py
ins = open( "prueba.txt", "r" ).read()
res = ['AA', 'BB','CC', 'DD']
for i in ins.split():
if all([r not in i for r in res]):
print i
$ cat prueba.txt
ABCD AABC DDCA CDAA CDAB EEGF GFFE
$ python t.py
ABCD
CDAB
EEGF
GFFE
$
答案 1 :(得分:0)
问题是您假设f在更改j时自动更新。
尝试更改
if a[i].find(f) != -1:
到
if a[i].find(c[j]) != -1:
你也应该有一个循环来改变我。
答案 2 :(得分:0)
试试这个:
s = ['AA', 'BB', 'CC', 'DD']
mInput = ['ABCD','AABC','DDCA','CDAA','CDAB','EEGF','GFFE']
anti_res = []
for e in mInput:
for i in s:
print i
if i in e:
if e not in anti_res:
anti_res.append(e)
res = [e for e in mInput if e not in anti_res]
print res
答案 3 :(得分:0)
您的代码存在一些问题。您在检查所有AA,BB,CC,EE值之前更新i。这就是为什么你不会得到所有限制的原因。
我写了下面的代码,我想它可能就是你需要的。试试看,如果你需要我解释一下,请告诉我。
import string
ins = open( "prueba.txt", "r" )
array = []
for line in ins:
array.append( line )
ins.close()
s = ''.join(array)
a= s.split()
c = ['AA', 'BB','CC', 'DD','EE', 'FF','GG', 'HH','II', 'JJ','KK', 'LL', 'MM', 'NN','OO', 'PP','QQ', 'RR','SS', 'TT','UU', 'VV', 'WW', 'XX','YY', 'ZZ']
i=0
j=0
for i in range(0,len(a)): #go through all the items from the input list
found=False
for j in range(0,len(c)): #check every item against every restriction
f=c[j]
if a[i].find(f) != -1:
print 'Is in:' , a[i]
found=True #remember if we found a restriction and stop the loop
break
if(found==False): print 'Is not in:' , a[i] #if by the end of the loop no restriction was found tell me that nothing was found