Python 巨蟒:“;至于;循环打印基于列字段匹配的行
我有一个python代码,它从一个原始文件生成行列表,我想搜索特定的列字段[第四列字段中有第二个字段中的行,第五列字段中有第二个字段中有FW.O的行]和外部文件内容字段中的匹配,以及打印行Python 巨蟒:“;至于;循环打印基于列字段匹配的行,python,regex,python-3.x,linux,csv,Python,Regex,Python 3.x,Linux,Csv,我有一个python代码,它从一个原始文件生成行列表,我想搜索特定的列字段[第四列字段中有第二个字段中的行,第五列字段中有第二个字段中有FW.O的行]和外部文件内容字段中的匹配,以及打印行 L = '''SET,FW.O,AS,num:+18700000,num:+12355, SET,IT,AS,num:+22211111,num:+12355, SET,FW.O,AS,num:+177232,num:+12355, SET,IT,AS,num:+368399793,num:+12355, '
L = '''SET,FW.O,AS,num:+18700000,num:+12355,
SET,IT,AS,num:+22211111,num:+12355,
SET,FW.O,AS,num:+177232,num:+12355,
SET,IT,AS,num:+368399793,num:+12355,
'''.split()
FWmatch = open("fwfields.txt").readlines()
ITmatch = open("itfields.txt").readlines()
for row in L:
if row[1] == "IT":
result = [i for i in L if any(x.replace('\n','') in i.split(',')[3] for x in ITmatch)]
elif row[1] == "FW.O":
result = [i for i in L if any(x.replace('\n','') in i.split(',')[4] for x in FWmatch)]
print('\n'.join(result))
如果“L”第2列字段为“IT”,则应在第5列字段中查找ITmatch
如果“L”第二列字段为“FW.O”FWmatch
应在第五列字段中查找
cat fwfields.txt
num:+12
num:+123
num:+222
num:+333
cat itfields.txt
num:+12
num:+123
num:+222
num:+333
将错误获取为“输出”未定义,因为我的代码不工作,并且未定义变量输出。。如果在“L”处删除.split(),则获取索引器。
所需输出:
SET,FW.O,AS,num:+18700000,num:+12355,#(第5个字段与FWmatch num:+123匹配)
SET,IT,AS,num:+22211111,num:+12355,#(与ITmatch num匹配的第四个字段:+222)
SET,FW.O,AS,num:+177232,num:+12355,#(第5个字段与FWmatch num:+123匹配)
需要考虑的要点:
FWmatch = open("fwfields.txt").readlines()
ITmatch = open("itfields.txt").readlines()
result1 = [i for i in lines if any(chomp(x) in i for x in FWmatch)]
result2 = [i for i in lines if any(chomp(x) in i for x in ITmatch)]
print('\n'.join(result1+result2))
这不会:
FWmatch = open("fwfields.txt")
ITmatch = open("itfields.txt")
result1 = [i for i in lines if any(chomp(x) in i for x in FWmatch.readlines())]
result2 = [i for i in lines if any(chomp(x) in i for x in ITmatch.readlines())]
print('\n'.join(result1+result2))
需要考虑的要点:
FWmatch = open("fwfields.txt").readlines()
ITmatch = open("itfields.txt").readlines()
result1 = [i for i in lines if any(chomp(x) in i for x in FWmatch)]
result2 = [i for i in lines if any(chomp(x) in i for x in ITmatch)]
print('\n'.join(result1+result2))
这不会:
FWmatch = open("fwfields.txt")
ITmatch = open("itfields.txt")
result1 = [i for i in lines if any(chomp(x) in i for x in FWmatch.readlines())]
result2 = [i for i in lines if any(chomp(x) in i for x in ITmatch.readlines())]
print('\n'.join(result1+result2))
您的代码失败,因为
result
未初始化,并且该条件从未保持,因为行[1]是行的第一个字符。您应该改用row.split(',')[1]。下面是一个有效的代码:
L = '''SET,FW.O,AS,num:+18700000,num:+12355,
SET,IT,AS,num:+22211111,num:+12355,
SET,FW.O,AS,num:+177232,num:+12355,
SET,IT,AS,num:+368399793,num:+12355,
'''.split()
def chomp(x):
return x.replace('\n','')
FWmatch = open("fwfields.txt").readlines()
ITmatch = open("itfields.txt").readlines()
result=[]
for row in L:
country = row.split(',')[1]
if country == "IT":
codes = ITmatch
elif country == "FW.O":
codes = FWmatch
num = row.split(',')[3]
if any(chomp(c) in num for c in codes):
result.append( row)
print('\n'.join(result))
您的代码失败,因为
result
未初始化,并且该条件从未保持,因为行[1]是行的第一个字符。您应该改用row.split(',')[1]。下面是一个有效的代码:
L = '''SET,FW.O,AS,num:+18700000,num:+12355,
SET,IT,AS,num:+22211111,num:+12355,
SET,FW.O,AS,num:+177232,num:+12355,
SET,IT,AS,num:+368399793,num:+12355,
'''.split()
def chomp(x):
return x.replace('\n','')
FWmatch = open("fwfields.txt").readlines()
ITmatch = open("itfields.txt").readlines()
result=[]
for row in L:
country = row.split(',')[1]
if country == "IT":
codes = ITmatch
elif country == "FW.O":
codes = FWmatch
num = row.split(',')[3]
if any(chomp(c) in num for c in codes):
result.append( row)
print('\n'.join(result))
嗨,我重新定义了我的问题,使之更清晰。。result1、result2对我来说很好,但我想使用for循环来读取每一行,并查看第二个字段是it还是FW.O,如果满足,则匹配所需ITmatch/FWmatch文件中的第4/5列。。请参阅我尝试过的FOR循环IF..ELSE条件,以及了解错误问题的帮助。您好,我已重新定义了我的问题以使其更清晰。。result1、result2对我来说很好,但我想使用for循环来读取每一行,并查看第二个字段是it还是FW.O,如果满足,则匹配所需ITmatch/FWmatch文件中的第4/5列。。请参阅我尝试过的FOR循环IF..ELSE条件,并帮助了解错误问题。