이것은 멍청한 질문 일 수 있지만 Python에서 XML 파일을 구문 분석하는 방법에 대한 몇 가지 질문 / 기사를 살펴 봤고 예제로 사용 된 파일이 실제로 내 것과 같지 않아서 약간 갇혀 있습니다. 내가 가지고있는 것의 예는 다음과 같습니다.
<item client="client_A" is_known="yes">
<sales1 id="sales1_name" check="no"></sales1>
<sales2 id="sales2_name" check="yes"></sales2>
</item>
<item client="client_B" is_known="no">
<sales1 id="sales1_name" check="yes"></sales1>
<sales2 id="sales2_name" check="yes"></sales2>
</item>
<item client="client_C" is_known="yes">
<sales2 id="sales2_name" check="yes"></sales2>
<sales3 id="sales3_name" check="no"></sales3>
</item>
파일의 주요 부분은 속성 및 기타 태그가 중첩 된 일련의 항목 태그입니다. 내가하고 싶은 것은 Python의 pandas DataFrame에서 변환하는 것이지만 항목 태그 내의 모든 정보가 온라인 상태가되기를 바랍니다. 예 :
고객 | is_known | sales_id | sales2_id |
---|---|---|---|
client_A | 예 | sales1_name | sales2_name |
pandas 및 xml.etree.ElementTree 라이브러리를 사용하여 다음 코드를 빌드 할 수있었습니다.
#DataFrame with the desired columns
df_cols = ['client',
'is_known',
'sales1_id',
'sales2_id'
]
#empty list that is filled with the loop
rows = []
#Loop that goes through the tags, look for the attribs and pass them into the rows
for node in root.iter():
client = node.attrib.get('client')
is_known = node.attrib.get('is_known')
sales1_id = node.attrib.get('id')
sales2_id = node.attrib.get('id')
rows.append({
'client': client,
'is_known': is_known,
'sales1_id': sales1_id,
'sales2_id': sales2_id
})
out_df = pd.DataFrame(rows, columns = df_cols)
그러나 내가 얻은 것은 이것뿐입니다.
그래서 여기 내 문제는 두 배입니다.
미리 감사드립니다!
다음과 같은 방법을 시도해 볼 수 있습니다.
items = root.findall('.//item')
rows = []
for item in items:
row = []
row.extend([item.attrib['client'],item.attrib['is_known']])
for sale in item.findall('.//*'):
row.append(sale.attrib['id'])
rows.append(row)
pd.DataFrame(rows,columns=df_cols)
산출:
client is_known sales1_id sales2_id
0 client_A yes sales1_name sales2_name
1 client_B no sales1_name sales2_name
2 client_C yes sales2_name sales3_name
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다