2017-06-18 81 views
0

我想選擇一些數據,這要歸功於csv文件中的條件,並將其寫入另一個組織不同的anoter csv文件中,然後他們再選擇另一個數據並將其寫入另一個文件中線。我用csv模塊和功能writerow做到這一點:在Python中操作csv文件

#Creation of the other csv file 
with open('superAdmins.csv', 'w', newline='') as csvfile: 
    spamwriter = csv.writer(csvfile) 
    spamwriter.writerow(['SuperAdmins'] + ['2 step authentication'] + ['Portée des droits']) 

i = 0 



#Selection of the first data 
with open('admins.csv', 'r') as csvinput,open('2authentication.csv', 'r') as csvinput2, open('superAdmins.csv', 'w+') as csvoutput: 
    reader = csv.DictReader(csvinput, delimiter=',') #lecteur 
    reader2 = csv.DictReader(csvinput2, delimiter=',') #lecteur 

    fieldnames = ['SuperAdmins', '2 step authentication','Portée des droits'] 
    writer = csv.DictWriter(csvoutput,fieldnames = fieldnames) #crayon 

    writer.writeheader() #Ecrit l'en-tête avec les fieldnames 

    for row in reader: 
     # write the selection logic here 
     if row["role"] == "_SEED_ADMIN_ROLE": 
      writer.writerow({'SuperAdmins': row['assignedToUser']}) 


#Selection of the second data 
     for row in reader: 
      print(row["primaryEmail"],superadmin) 
      # write the selection logic here 
      if row["primaryEmail"] == superadmin: 
       if row["isEnforcedIn2Sv"] == "False" and row["isEnrolledIn2Sv"] == "False": 
        writer.writerow({'2 step authentication': "false"}) 

我得到:

SuperAdmins,2 step authentication,Portée des droits 
[email protected],, 
,Test, 
,false, 

而我想有:

SuperAdmins,2 step authentication,Portée des droits 
[email protected],Test,false 

我想這功能writerow通過在每次使用時添加逗號來開始一個新行,我正在尋找一種方法來繼續寫在同一行上。

非常感謝您的幫助。

回答

0

'writerow'方法寫入一整行。所以當你在一行中有多個單元格時,你只需要將整行寫一次(而不是現在做的兩次)。

簡單的解決方案是定義一個變量(也許稱爲row_dict),用所有的信息逐漸填充它,然後在循環結尾使用writerow函數和變量作爲參數。

您的特定代碼:

for row in reader: 
    row_dict = {} 
    # write the selection logic here 
    if row["role"] == "_SEED_ADMIN_ROLE": 
     row_dict['SuperAdmins'] = row['assignedToUser'] 

     print(row["primaryEmail"],superadmin) 
     # write the selection logic here 
     if row["primaryEmail"] == superadmin: 
      if row["isEnforcedIn2Sv"] == "False" and row["isEnrolledIn2Sv"] == "False": 
       row_dict['2 step authentication'] = ["false"] 

    writer.writerow(row_dict) 
+0

這應該是一個評論,除非你願意提供一些代碼來的OP質疑 –

+0

謝謝您的回答是相關的。對不起,我開始學習Python,並且從未使用過「row_dict變量」。我不明白網上有關它的信息,我可以問你它是如何工作的嗎? – KB303

+0

@DmitryPolonskiy公平點。 – lesingerouge