我創建了一個 python 腳本,它將在 excel 中附加資料。但是,在 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中的輸出是這樣的:登錄= A1,用戶名= B1,角色= C1,狀態= D1
- 登錄用戶名角色狀態
- admin 管理員 管理員 活動
- 登錄用戶名角色狀態
- admin 管理員 管理員 活動
- user1 佩德羅領導者活躍
- 登錄用戶名角色狀態
- admin 管理員 管理員 活動
- user1 佩德羅領導者活躍
- user2 娟領導活躍
另外,對于非活動用戶的 else 回圈,是否可以將它們在同一個 excel 檔案中附加到另一個作業表?謝謝你們
uj5u.com熱心網友回復:
嗨 @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')
獲取用戶詳細資訊()
uj5u.com熱心網友回復:
ws.append()
andws.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')
uj5u.com熱心網友回復:
您確定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)
我希望你能從我的建議中得到解決問題的提示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480756.html