[英]for loop in for loop, python, csv reader/writer
我是python的新手,但是經過3天的閱讀和尋找解決方案但都沒有成功,我迷路了。
我有帶有數據(id,user_id ...)的mysql表。 我連接到數據庫,讀取user_id並將數據保存到數組“用戶”中。 然后,我打開帶有很多行和列(user_id,名稱,郵件,電話,地址...)的csv文件。 在下一步中,我將比較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()
您需要重新打開input.csv文件。 當您瀏覽文件的每一行而不重新打開它時,課程表將始終位於文件的最后一行。 要將輸入文件的移動打開修復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
我認為您必須注意變量的格式,因為您比較整數和字符串(來自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)
似乎為我工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.