我试图这样做:如果最后一列是1-5的负数,则将第二列和最后一列写入文件" neg.txt"。如果最后一列是正数,则需要将第二列和最后一列写入" pos.txt"。我的两个输出文件在执行后最终为空。当我认为 if语句可以处理多个条件时,我不知道代码有什么问题。我也尝试使用正则表达式,但它确实没有用,所以我尽量简单地看看它是什么不起作用。
输入文件如下所示:
abandon odustati -2
abandons napusta -2
abandoned napusten -2
absentee odsutne -1
absentees odsutni -1
aboard na brodu 1
abducted otet -2
accepted prihvaceno 1
我的代码是:
from urllib.request import urlopen
import re
pos=open('lek_pos.txt','w')
neg=open('lek_neg.txt','w')
allCondsAreOK1 = ( parts[2]=='1' and parts[2]=='2' and
parts[2]=='3' and parts[2]=='4' and parts[2]=='5' )
allCondsAreOK2 = ( parts[2]=='-1' and parts[2]=='-2' and
parts[2]=='-3' and parts[2]=='-4' and parts[2]=='-5' )
with open('leksicki_resursi.txt') as pos:
for line in pos:
parts=line.split() # split line into parts
if len(parts) > 1: # if at least 2 columns (parts)
if allCondsAreOK:
pos.write(parts[1]+parts[2])
elif allCondsAreOK2:
neg.write(parts[1]+parts[2])
else:
print("nothing matches")
答案 0 :(得分:1)
你不需要一个正则表达式,你只需要一个if / elif检查是否在转换为int之后,最后一个值落在-5
和-1
之间,如果你写入了neg文件或者,如果该值是您写入pos文件的任何非负数:
with open('leksicki_resursi.txt') as f, open('lek_pos.txt','w')as pos, open('lek_neg.txt','w') as neg:
for row in map(str.split, f):
a, b = row[1], int(row[-1])
if b >= 0:
pos.write("{},{}\n".format(a, b))
elif -5 <= b <= -1:
neg.write("{},{}\n".format(a, b))
如果肯定的nums也必须在1-5之间,那么你可以做一些类似于负面条件的事情:
if 5 >= int(b) >= 0:
pos.write("{},{}\n".format(a, b))
elif -5 <= int(b) <= -1:
neg.write("{},{}\n".format(a, b))
如果你有空行,你可以过滤掉它们:
for row in filter(None,map(str.split, f)):