我是python的新手,但经过3天的阅读并找到解决方案但没有成功,我迷失了。
我有mysql表的数据(id,user_id ...)。我连接到db,读取user_id并将数据保存到数组“user”中。然后我打开带有很多行和列的csv文件(user_id,名称,邮件,电话,地址......)。在下一步中,我将比较db中的user_id是否与csv文件中的user_id匹配。如果答案是肯定的,那么我将这一行写在另一个csv文件中。
问题是我的代码仅适用于第一个id_user。拜托,你能帮帮我吗?
示例表
table in db:
id user_id
1 318604
2 318624
csv文件:
318604; John; john@gmail.com
318604; 053746; USA
318624; Lucy; Lucy@gmail.com
318624; 058839 Sweeden
318630; Luke; Luke@gmail.com
新文件中的预期结果:
318604; John; john@gmail.com
318604; 053746; USA
318624; Lucy; Lucy@gmail.com
318624; 058839 Sweeden
代码:
cur = con.cursor()
with open('input.csv', mode='rb') as f:
reader = csv.reader(f, delimiter=';')
with open('output.csv', mode='a') as w:
writer = csv.writer(w)
with con:
cur.execute("SELECT user_id FROM users")
user=cur.fetchall()
for i in range(len(user)):
for row in reader:
if(user[i][0]==row[0]):
writer.writerow(row)
con.close()
答案 0 :(得分:3)
您需要重新打开 input.csv 文件。当您浏览文件的每一行而不重新打开它时,您的courser将始终位于文件的最后一行。要修复输入文件向for user
循环的移动:
cur = con.cursor()
with open('output.csv', mode='a') as w:
writer = csv.writer(w)
with con:
cur.execute("SELECT user_id FROM users")
user=cur.fetchall()
for i in range(len(user)):
with open('input.csv', mode='rb') as f:
reader = csv.reader(f, delimiter=';')
for row in reader:
if(user[i][0]==row[0]):
writer.writerow(row)
con.close()
我用这段代码测试了它:
import csv
user = [[1,318604],[2,318624]]
with open('output.csv', mode='a') as w:
writer = csv.writer(w)
for i in range(len(user)):
with open('input.csv', mode='rb') as f:
reader = csv.reader(f, delimiter=';')
for row in reader:
if(str(user[i][1])==row[0]):
writer.writerow(row)
而是从数据库输出我使用了包含整数的列表。所以我需要将user[i][1]
转换为字符串。另外user[i][0]
为id
,当user[i][1]
为user_id
时,不知道数据库的输出是否相同。
输出:
318604, John, john@gmail.com
318604, 053746, USA
318624, Lucy, Lucy@gmail.com
318624, 058839 Sweeden
答案 1 :(得分:-1)
我认为你必须处理变量的格式,因为你比较整数和字符串(来自csv),试试这个:
cur = con.cursor()
with open('input.csv', mode='rb') as f:
reader = csv.reader(f, delimiter=';')
with open('output.csv', mode='a') as w:
writer = csv.writer(w)
with con:
cur.execute("SELECT user_id FROM users")
users=cur.fetchall()
for u in user:
for row in reader:
if(str(u[0])==str(row[0])):
writer.writerow(row)
似乎对我有用