gpt4 book ai didi

python - 嵌套for循环的问题

转载 作者:行者123 更新时间:2023-11-28 20:29:03 25 4
gpt4 key购买 nike

我必须读取两个 csv 文件,合并行并将结果写入第三个 csv 文件。第一个 csv 文件有五行,第一列中有用户名。(总共 25 列)第二个 csv 文件有五行,第一列是用户名,第二列是用户 ID。(只有 2 列)

第三个 csv 文件将包含用户名+用户 ID 以及第一个文件的所有剩余 24 列。

data = open(os.path.join("c:\\transales","AccountID+ContactID-source1.csv"),"rb").read().replace(";",",").replace("\0","")
data2 = open(os.path.join("c:\\transales","AccountID+ContactID-source2.csv"),"rb").read().replace(";",",").replace("\0","")

i = 0
j = 0
Info_Client_source1=StringIO.StringIO(data)
Info_Client_source2=StringIO.StringIO(data2)


for line in csv.reader(Info_Client_source1):
name= line[1]
i=i+1
print "i= ",i
for line2 in csv.reader(Info_Client_source2):
print "j = :",j
j=j+1
if line[1] == line2[2]:
continue

结果:

i=  1
j = : 0
j = : 1
j = : 2
j = : 3
j = : 4
j = : 5
j = : 6
i= 2
i= 3
i= 4
i= 5
i= 6
i= 7

为什么在 i=2 之后 seconf for 循环什么都不做??我希望有 i=2, j=0 到 6, i=3 j=0 ro 6 ,...

最佳答案

这是因为您在第一遍中读取了 StringIO 对象的全部内容,将光标留在了字符串的末尾。在第二遍中,没有任何内容可读,因此您最终得到一个空的阅读器。

此外,为循环的每个内部迭代调用 csv.reader() 可能不是一个好主意。让我改写您的代码,然后解释我的更改:

data = open(os.path.join("c:\\transales","AccountID+ContactID-source1.csv"),"rb").read().replace(";",",").replace("\0","")
data2 = open(os.path.join("c:\\transales","AccountID+ContactID-source2.csv"),"rb").read().replace(";",",").replace("\0","")

source1 = csv.reader(data)
source2 = csv.reader(data2)

for line in source1:
name= line[1]
i=i+1
print "i= ",i
data2.seek(0)
for line2 in source2:
print "j = :",j
j=j+1
if line[1] == line2[2]:
continue

变化:

  • 我删除了创建 StringIO 对象的无关步骤;您只需将标准文件句柄传递给 csv.reader() 即可正常工作。 (如果有创建这些 StringIO 对象的原因,请随意将其添加回...)
  • 我已将读取器的初始化移到 for 循环之外。虽然在外循环中初始化 source1 没问题,但在内循环中初始化 source2 效率很低。
  • 最重要的是,调用 data2.seek(0) 会重置底层文件句柄上的光标,这将允许您重复读取 data2。

这里有一个关于 SO 的类似问题,它可能更好地说明了这个想法:

StackOverflow: Reading from CSVs in Python repeatedly?

希望对您有所帮助。 :)

关于python - 嵌套for循环的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com