Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 3985622
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 20, 20262026-05-20T05:54:46+00:00 2026-05-20T05:54:46+00:00

I need a little help on finding a tutorial or sample on taking a

  • 0

I need a little help on finding a tutorial or sample on taking a list comprehension and merging that with a data file from csv and turning all that into an xml file. From reading various python books & pdfs like ditp,IYOCGwP, learnpythonthe hardway,, lxml tut, think python and online searches I am most of the way there or so I think. I just need a push on tying everything together. I am basically taking an excel spreadsheet which I am exporting as a csv file. The csv contains rows of records which I need to map into an xml file. I am new to Python and thought I would use my little project to learn the language. The code listed is not pretty but works. I can read in a csv file and dump that into a list. I can combine 3 lists and output the resulting list and I can get my program to spit out a skeleton xml that is almost laid out in the format that I need. I will list my actual output of a small sample and what I am trying to accomplish with the xml below this code. Sorry if this is too lengthy, this is my first post.

import csv, datetime, os  
from lxml import etree  
from ElementTree_pretty import prettify

f = os.path.getsize("SO.csv")
fh = "SO.csv"
rh = open(fh, "rU")

rows = 0
try:
    rlist = csv.reader(rh)
    reports = []
    for row in rlist:
        '''print row.items()'''
        rowStripped = [x.strip(' ') for x in row]
        reports.append(rowStripped)
        rows +=1
except csv.Error, e:
    sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))

finally:
    rh.close()

root = etree.Element("co_ehs")
object = etree.SubElement(root, "object")
event = etree.SubElement(object, "event")
facets = etree.SubElement(event, "facets")
categories = etree.SubElement(facets, "categories")
instance = etree.SubElement(categories, "instance")
property = etree.SubElement(instance, "property")

facets = ['header','header','header','header','informational','header','informational']

categories =     ['processing','processing','processing','processing','short_title','file_num','short_narrative']

property = ['REPORT ID','NEXT REPORT ID','initial-event-date','number','title','summary-docket-num','description-story']

print('----------Printing Reports from CSV Data----------')
print reports
print('---------END OF CSV DATA-------------')
print
mappings = zip(facets, categories, property)
print('----------Printing Mappings from the zip of facets, categories, property ----------')
print mappings
print('---------END OF List Comprehension-------------')
print
print('----------Printing the xml skeleton that will contain the mappings and the csv data ----------')
print(etree.tostring(root, xml_declaration=True, encoding='UTF-8', pretty_print=True))
print('---------END OF XML Skeleton-------------')  

----My OUTPUT---  
----------Printing Reports from CSV Data----------  
[['1', '12-Dec-04', 'Vehicle Collision', '786689', 'No fault collision due to ice', '-1', '545671'], ['3', '15-Dec-04', 'OJT Injury', '87362', 'Paint fumes combusted causing 2nd degree burns', '4', '588456'], ['4', '17-Dec-04', 'OJT Injury', '87362', 'Paint fumes combusted causing 2nd degree burns', '-1', '58871'], ['1000', '12-Nov-05', 'Back Injury', '9854231', 'Lifting without a support device', '-1', '545671'], ['55555', '12-Jan-06', 'Foot Injury', '7936547', 'Office injury - heavy item dropped on foot', '-1', '545671']]  
---------END OF CSV DATA-------------  
----------Printing Mappings from the zip of facets, categories, property ----------  
[('header', 'processing', 'REPORT ID'), ('header', 'processing', 'NEXT REPORT ID'), ('header', 'processing', 'initial-event-date'), ('header', 'processing', 'number'), ('informational', 'short_title', 'title'), ('header', 'file_num', 'summary-docket-num'), ('informational', 'short_narrative', 'description-story')]  
---------END OF List Comprehension-------------  
----------Printing the xml skeleton that will contain the mappings and the csv data ----------  

    <?xml version='1.0' encoding='UTF-8'?>
    <co_ehs>
      <object>
        <event>
          <facets>
            <categories>
              <instance>
                <property/>
              </instance>
            </categories>
          </facets>
        </event>
      </object>
</co_ehs>

---------END OF XML Skeleton-------------  
----------CSV DATA------------------  
C_ID,NEXT_C_ID,C_DATE,C_NUMBER,C_EVENT,C_DOCKETNUM,C_DESCRIPTION  
1,-1,12-Dec-04,545671,Vehicle Collision,786689,"No fault collision due to ice"  
3,4,15-Dec-04,588456,OJT Injury,87362,"Paint fumes combusted causing 2nd degree burns"  
4,-1,17-Dec-04,58871,OJT Injury,87362,"Paint fumes combusted causing 2nd degree burns"  
1000,-1,12-Nov-05,545671,Back Injury,9854231,"Lifting without a support device"  
55555,-1,12-Jan-06,545671,Foot Injury,7936547,"Office injury - heavy item dropped on foot"  

-----------What I want the xml output to look like----------------------  
    <?xml version="1.0" encoding="UTF-8"?>
    <co_ehs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="co_ehs.xsd">  
      <object id="3" object-type="ehs_report">
        <event event-tag="0">
          <facets name="header">
            <categories name="processing">
              <instance instance-tag="0">
                <property name="REPORT ID" value="1"/>
                <property name="NEXT REPORT ID" value="-1"/>
                <property name="initial-event-date" value="12-Dec-04"/>
                <property name="number" value="545671"/>
              </instance>
            </categories>
          </facets>
          <facets name="informational">
            <categories name="short_title">
              <instance-tag="0">
                <property name="title" value="Vehicle Collision"/>
              </instance>
            </categories>
          </facets>
          <facets name="header">
            <categories name="file_num">
              <instance-tag="0">
                <property name="summary-docket-num" value="786689"/>
              </instance>
            </categories>
          </facets>
          <facets name="informational">
            <categories name="short_narrative">
              <instance-tag="0">
                <property name="description-story" value="No fault collision due to ice"/>
              </instance>
            </categories>
          </facets>
        </event>
      </object>
    </co_ehs>
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-20T05:54:46+00:00Added an answer on May 20, 2026 at 5:54 am

    Here is my solution. I use lxml, because it’s normally better to generate XML with a framework than with strings or a template file.

    The attributes of co_ehs are missing, but this could easily be fixed with some set()-calls. I leave it up to you to do this.

    BTW: You can accept the best answer by clicking on the check mark on the left side of the answer

    import csv, datetime, os  
    from lxml import etree
    
    def makeFacet(event, newheaders, ev, facetname, catname, count, nhposstart, nhposend):
        facets = etree.SubElement(event, "facets", name=facetname)
        categories = etree.SubElement(facets, "categories", name=catname)
        instance = etree.SubElement(categories, "instance") 
        instance.set("instance-tag", count)
    
        for i in range(nhposstart, nhposend):
            property = etree.SubElement(instance, "property")
            property.set("name", newheaders[i])
            property.set("value", ev[i].strip())
    
    
    # read the csv
    fh = "SO.csv"
    rh = open(fh, "rU")
    
    try:
        rlist = list(csv.reader(rh))
    except csv.Error as e:
        sys.exit("file %s, line %d: %s" % (filename, reader.line_num, e))
    finally:
        rh.close()
    
    # generate the xml
    
    # newheaders is a mapping of the csv column names, because they don't correspondent w/ the XML
    newheaders = ["REPORT_ID","NEXT_REPORT_ID","initial-event-date","number","title","summary-docket-num", "description-story"]
    
    root = etree.Element("co_ehs")
    
    object = etree.SubElement(root, "object")
    
    object.set("id", "3") # Not sure about this one
    object.set("object-type", "ehs-report")
    
    for c, ev in enumerate(rlist[1:]):
        event  = etree.SubElement(object, "event")
        event.set("event-tag", "%s"%c) 
        makeFacet(event, newheaders, ev, "header", "processing", "%s"%c, 0, 4)
        makeFacet(event, newheaders, ev, "informational", "short-title", "%s"%c, 4, 5)
        makeFacet(event, newheaders, ev, "header", "file_num", "%s"%c, 5, 6)
        makeFacet(event, newheaders, ev, "informational", "short_narrative", "%s"%c, 6, 7)
    
    print(etree.tostring(root, xml_declaration=True, encoding="UTF-8", pretty_print=True))
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I need a little help for finding regular expression that suits my need, what
I need a little help getting a tar file to download from a website.
I would need little help here. I'm trying to get the git respository from
need a little help with this one. I have a form that I am
I need a little help with my new assignment. Problem: Given Two Linked List
Need a little help again. Say I have an unordered list, and I want
I need a little help with updating my UI from Runnable/Handler every second. I'm
I need a little help about a PHP FB app. Matter is that I
Need a little help with a regex I'm trying to match a string that
I just need little help, that is: many times i have seen http://www.xyz.com/index.jsp?etetet%rr^_frfwrw.... .

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.