我正在尝试解析 2 个竖线/逗号分隔的文件,如果文件中的特定字段匹配,则在第 3 个文件中创建新条目。
代码如下:
#! /usr/bin/python
fo = open("c-1.txt" , "r" )
for line in fo:
#print line
fields = line.split('|')
src = fields[0]
f1 = open("Airport.txt", 'r')
f2 = open("b.txt", "a")
#with open('c.csv', 'r') as f1:
# line1 = f1.read()
for line1 in f1:
reader = line1.split(',')
hi = False
target = reader[0]
if target == src and fields[1] == 'ZHT':
print target
hi = True
f2.write(fields[0])
f2.write("|")
f2.write(fields[1])
f2.write("|")
f2.write(fields[2])
f2.write("|")
f2.write(fields[3])
f2.write("|")
f2.write(fields[4])
f2.write("|")
f2.write(fields[5])
f2.write("|")
f2.write(reader[2])
if hi == False:
f2.write(line)
f2.close()
f1.close()
fo.close()
匹配字段在新文件中打印了 2 次。可能是什么原因?
最佳答案
问题似乎是您在循环的每次迭代中将 hi
重置为 False
。可以说第二行匹配,但第三行不匹配。您在第二行将 hi
设置为 True
,但在第三行再次设置为 False
,然后打印原始 line
.
像这样尝试:
hi = False
for line1 in f1:
reader = line1.split(',')
target = reader[0]
if target == src and fields[1] == 'ZHT':
hi = True
f2.write(stuff)
if hi == False:
f2.write(line)
或者,假设只有一行会匹配,您可以使用 for/else
:
for line1 in f1:
reader = line1.split(',')
target = reader[0]
if target == src and fields[1] == 'ZHT':
f2.write(stuff)
break
else:
f2.write(line)
另请注意,您可能会用这个替换那一系列的 f2.write
语句,用 |
连接几个部分:
f2.write('|'.join(fields[0:6] + [reader[2]])
关于python - 在python中解析文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30570538/