提问人:Ganyu Simp 提问时间:10/29/2023 最后编辑:mkrieger1Ganyu Simp 更新时间:10/29/2023 访问量:86
我在 python 中的 while 循环在第一个循环中停止了?
My while loop in python stopped in first loop?
问:
我有一个任务:
比较两个文件的 ID,如果 ID 匹配,则将文件 b1 的 lat 和 lon 复制到 b2。 我的代码使用一个循环,但在外部的第二个循环中,当它只运行外部而跳过内部时。我能做些什么?
file1=open("b1.csv",mode='r',encoding='utf-8')
file2=open("b2.csv",mode='r+',encoding='utf-8')
header1 = file1.readline()
header2 = file2.readline()
row1 = file1.readline()
while row1 != "":
row2 = file2.readline()
rowlist1 = row1.split(",")
while row2 != "":
rowlist2 = row2.split(',')
if rowlist2[0] == rowlist1[0]:
rowlist2[2] = rowlist1[2]
rowlist2[3] = rowlist1[3]
print(rowlist1,rowlist2)
row2 = file2.readline()
print(rowlist1)
row1 = file1.readline()
文件1:
ID,name,lon,lat
1345,name1,123.6,20.3
5436,name2,123.7,25.6
5765,name3,212.3,21.2
3424,name4,154.5,23.3
文件2:
ID,name,lon,lat
1345,name1,,
5436,name2,,
5765,name3,,
3424,name4,,
答:
0赞
Codist
10/29/2023
#1
如果文件很大,您似乎要做的事情将非常低效。如果我们假设这两个文件都可以(同时)存储在内存中,那么将它们转换为字典将使处理更容易、更高效。
CH = "__ch__" # dummy key for the column headers
def asdict(filename, include_header=False):
d = {}
with open(filename) as data:
for i, line in enumerate(map(str.strip, data)):
if i:
_id, *vals = line.split(',')
d[_id] = vals
elif include_header:
d[CH] = line
return d
B1 = "b1.csv"
B2 = "b2.csv"
d1 = asdict(B1)
d2 = asdict(B2, True)
for k, v in d1.items():
if k in d2:
# copy the longitude and latitude but not the name
d2[k][1:] = v[1:]
# rewrite the b2 file
with open(B2, "w") as data:
print(d2.pop(CH), file=data)
for k, v in d2.items():
print(",".join([k]+v), file=data)
评论
csv