我在 python 中的 while 循环在第一个循环中停止了?

My while loop in python stopped in first loop?

提问人:Ganyu Simp 提问时间:10/29/2023 最后编辑:mkrieger1Ganyu Simp 更新时间:10/29/2023 访问量:86

问:

我有一个任务:

比较两个文件的 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,,
python-3.x while-loop

评论

1赞 cards 10/29/2023
@Ganyu Simp 考虑使用标准库中的 csv
0赞 Ganyu Simp 10/29/2023
原件是 .xlsx 文件,但我听说需要转换为 .csv 文件

答:

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)