제어 할 수없는 데이터베이스에서 가져온 기본 XML 파일이 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<data>
<Job1Start><Time>20200202055415725</Time></Job1Start>
<Job1End><Time>20200202055423951</Time></Job1End>
<Job2Start><Time>20200202055810390</Time></Job2Start>
<Job3Start><Time>20200202055814687</Time></Job3Start>
<Job2End><Time>20200202055819000</Time></Job2End>
<Job3End><Time>20200202055816708</Time></Job3End>
</data>
CSV 파일에서 다음 출력을 얻고 싶습니다.
Task Start Finish
Job1 20200202055415725 20200202055423951
Job2 20200202055810390 20200202055819000
Job3 20200202055814687 20200202055816708
몇 가지 방법을 시도했지만 아래는 올바른 출력에 가장 가까운 것처럼 보이지만 제대로 작동하지 않습니다.
import xml.etree.ElementTree as ET
import csv
tree = ET.parse('Jobs.xml')
root = tree.getroot()
with open('Output.csv', 'w') as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for TaskName in root.findall('Job1Start'):
starttime = TaskName.find('Time').text
task = "Job1"
writer.writerows(zip(task, starttime))
print("Job1", starttime)
여기에서 얻은 출력은 다음과 같습니다. 형식이 잘못되어 Job1에서 시작 시간 만 검색 할 수있었습니다.
누구든지 비슷한 문제에 대한 경험이 있습니까?
writerows
대신 writerow
단일 문자 문제 및 csv.writer
. writerows
는 목록 목록 (또는 더 정확하게는 반복 가능 항목)을 예상하고 문자열은 반복 가능하므로 문자열 목록은 요구 사항을 충족하지만 내부 "목록"항목은 단일 문자입니다.
csv.writer
또한 newline=''
설명서에 따라 필요 하며 Windows에서이 매개 변수가 없으면 CSV가 Excel에서 열릴 때 행 사이에 추가 빈 줄로 표시됩니다.
해결책은 다음과 같습니다.
import xml.etree.ElementTree as ET
import csv
tree = ET.parse('Jobs.xml')
root = tree.getroot()
# Use newline='' per csv docs. This fixes the blanks lines in your output
with open('Output.csv', 'w', newline='') as csv_file:
writer = csv.writer(csv_file)
writer.writerow('Task Start Finish'.split())
for job in range(1,4):
start = root.find(f'Job{job}Start/Time').text
end = root.find(f'Job{job}End/Time').text
# Use writerow not writerows...latter expects list of lists.
writer.writerow([f'Job{job}',start,end])
산출:
Task,Start,Finish
Job1,20200202055415725,20200202055423951
Job2,20200202055810390,20200202055819000
Job3,20200202055814687,20200202055816708
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다