簡體   English   中英

使用 Openpyxl excel 中的重復數據

[英]Duplicated data in excel using Openpyxl

我創建了一個 python 腳本,它將 excel 中的 append 數據。但是,在 excel 中傳輸的數據有多個重復。 有人可以幫我修復我的腳本嗎?

tree = ET.parse('users.xml')
root = tree.getroot()
#create excel
wb = Workbook()
ws = wb.active
ws.title = ("Active Users")
df=pd.DataFrame(columns=["Login", "User Name", "Role", "Status"])
for user in root.findall('user'):
    login = user.find('login').text
    for m in tls.getUserByLogin(login):
        user_status = int(m.get("isActive"))
        
        if user_status == 1:
            lastname = m.get("lastName")
            firstname = m.get("firstName")
            userLogin = m.get("login")
            activeStatus = ("Active User")
            role = m.get("globalRole")
            tproject = m.get("tprojectRoles")    
            print("Login: " + userLogin + " " + lastname + " " + firstname + " Role: " + str(role['name']) + " " + str(activeStatus))
            df.loc[len(df.index)] =[userLogin, lastname, str(role['name']), str(activeStatus)]
            for row in dataframe_to_rows(df, index = False):
                ws.append(row)          
        else:
            inactive = (str(m.get("firstName")) + " " + str(m.get("lastName")) +": User is not Active")
            print(inactive)
    wb.save(filename = 'userData.xlsx')

excel中的output是這樣的:Login = A1, User Name = B1, Role = C1, Status = D1

  1. 登錄用戶名角色狀態
  2. admin 管理員 Admin 活躍
  3. 登錄用戶名角色狀態
  4. admin 管理員 Admin 活躍
  5. user1 Pedro leader 活躍
  6. 登錄用戶名角色狀態
  7. admin 管理員 Admin 活躍
  8. user1 Pedro leader 活躍
  9. user2 Juan leader 活躍

另外,對於非活動用戶的 else 循環,是否可以將同一個 excel 文件中的 append 轉移到另一張紙上? 謝謝你們

@Redox 和@taipei 您好,感謝您的快速回復和回答,我已經以不同的格式解決了我的重復問題:)

def getUserDetail():    
tree = ET.parse('users.xml')
root = tree.getroot()
#create excel
workbook = Workbook()
ws = workbook.active
ws.title = ("Active Users")
ws.append(['Login', 'User Name', 'Role', 'Status'])
#logins = []
for user in root.findall('user'):
    login = user.find('login').text
#    logins.append(login)
# for index in range(10):
#     login = logins[index]
    for m in tls.getUserByLogin(login):
        user_status = int(m.get("isActive"))
        if user_status == 1:
            lastname = m.get("lastName")
            firstname = m.get("firstName")
            userLogin = m.get("login")
            activeStatus = ("Active User")
            role = m.get("globalRole")
            tproject = m.get("tprojectRoles")    
            print("Login: " + userLogin + " " + lastname + " " + firstname + " Role: " + str(role['name']) + " " + str(activeStatus))
            data = [[userLogin, lastname + firstname, str(role['name']), str(activeStatus)]]
            for row in data:
                ws.append(row)
        else:
            inactive = (str(m.get("firstName")) + " " + str(m.get("lastName")) +": User is not Active")
            print(inactive)
### MOVED code here - note it should be outside ALL for loops ####             
workbook.save(filename = 'userData.xlsx')

獲取用戶詳情()

ws.append()ws.save應該在 ALL for循環之外,包括第一個循環。 在此處更新代碼。


tree = ET.parse('users.xml')
root = tree.getroot()
#create excel
wb = Workbook()
ws = wb.active
ws.title = ("Active Users")
df=pd.DataFrame(columns=["Login", "User Name", "Role", "Status"])
for user in root.findall('user'):
    login = user.find('login').text
    for m in tls.getUserByLogin(login):
        user_status = int(m.get("isActive"))
        
        if user_status == 1:
            lastname = m.get("lastName")
            firstname = m.get("firstName")
            userLogin = m.get("login")
            activeStatus = ("Active User")
            role = m.get("globalRole")
            tproject = m.get("tprojectRoles")    
            print("Login: " + userLogin + " " + lastname + " " + firstname + " Role: " + str(role['name']) + " " + str(activeStatus))
            df.loc[len(df.index)] =[userLogin, lastname, str(role['name']), str(activeStatus)]
        else:
            inactive = (str(m.get("firstName")) + " " + str(m.get("lastName")) +": User is not Active")
            print(inactive)

### MOVED code here - note it should be outside ALL for loops ####
for row in dataframe_to_rows(df, index = False):
    ws.append(row)          

wb.save(filename = 'userData.xlsx')

您確定users.xml只包含唯一用戶嗎?

如果您不確定,我認為最好檢查現有的用戶邏輯。

為此,您可以使用字典或數組將用戶臨時存儲在循環中並檢查當前用戶是否存在

. . .
user_tmp = []
for user in root.findall('user'):
    login = user.find('login').text
    # Check if login is in the list
    if login not in user_tmp:
        user_tmp.append(login)
    else:
        # if login is in the list, continue the loop
        continue
 . . .

由於您使用的是 Pandas 數據框,因此在使用toExcel保存數據框時可以生成多張工作表

# Example, you generate an active user in df_active and inactive user in # create a excel writer object
with pd.ExcelWriter("path to file\filename.xlsx") as writer:
    # use to_excel function and specify the sheet_name and index
    # to store the dataframe in specified sheet
    df_active.to_excel(writer, sheet_name="Active", index=False)
    df_inactive.to_excel(writer, sheet_name="Inactive", index=False)

我希望你能從我的建議中得到解決問題的提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM