Yes it changes your quotechar = "'" into quotechar = '"'
You should no more get the double quoting of the data string and no more
slicing step.
Karim
On 10/01/2016 00:15, Saran Ahluwalia wrote:
Thank you for the feedback on this. I believe that the excel dialect
includes just that:
class excel(Dialect):
delimiter = ','
quotechar = '"'
doublequote = True
skipinitialspace = False
lineterminator = '\r\n'
quoting = QUOTE_MINIMAL
On Sat, Jan 9, 2016 at 5:23 PM, Karim <kliat...@gmail.com
<mailto:kliat...@gmail.com>> wrote:
On 09/01/2016 21:54, kbtyo wrote:
My specs:
Python 3.4.3
Windows 7
IDE is Jupyter Notebooks
What I have referenced:
1)
http://stackoverflow.com/questions/1546717/python-escaping-strings-for-use-in-xml
2)
http://stackoverflow.com/questions/7802418/how-to-properly-escape-single-and-double-quotes
3)http://stackoverflow.com/questions/4972210/escaping-characters-in-a-xml-file-with-python
Here is the data (in CSV format) and script, respectively, (I
have tried variations on serializing Column 'E' using both Sax
and ElementTree):
i)
A,B,C,D,E,F,G,H,I,J
"3","8","1","<Request TransactionID="3"
RequestType="FOO"><InstitutionISO
/><CallID>23</CallID><MemberID>12</MemberID><MemberPassword
/><RequestData><AccountNumber>2</AccountNumber><AccountSuffix>85</AccountSuffix><AccountType>S</AccountType><MPIAcctType>Checking</MPIAcctType><TransactionCount>10</TransactionCount></RequestData></Request>","<Response
TransactionID="2"
RequestType="HoldInquiry"><ShareList>0000',0001,0070,</ShareList></Response>","1967-12-25
22:18:13.471000","2005-12-25 22:18:13.768000","2","70","0"
ii)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os.path
import sys
import csv
from io import StringIO
import xml.etree.cElementTree as ElementTree
from xml.etree.ElementTree import XMLParser
import xml
import xml.sax
from xml.sax import ContentHandler
class MyHandler(xml.sax.handler.ContentHandler):
def __init__(self):
self._charBuffer = []
self._result = []
def _getCharacterData(self):
data = ''.join(self._charBuffer).strip()
self._charBuffer = []
return data.strip() #remove strip() if whitespace is
important
def parse(self, f):
xml.sax.parse(f, self)
return self._result
def characters(self, data):
self._charBuffer.append(data)
def startElement(self, name, attrs):
if name == 'Response':
self._result.append({})
def endElement(self, name):
if not name == 'Response': self._result[-1][name] =
self._getCharacterData()
def read_data(path):
with open(path, 'rU', encoding='utf-8') as data:
reader = csv.DictReader(data, delimiter =',',
quotechar="'", skipinitialspace=True)
for row in reader:
yield row
if __name__ == "__main__":
empty = ''
Response = 'sample.csv'
for idx, row in enumerate(read_data(Response)):
if idx > 10: break
data = row['E']
print(data) # The before
data = data[1:-1]
data = ""'{}'"".format(data)
print(data) # Sanity check
# data = '<Response TransactionID="2"
RequestType="HoldInquiry"><ShareList>0000',0001,0070,</ShareList></Response>'
try:
root = ElementTree.XML(data)
# print(root)
except StopIteration:
raise
pass
# xmlstring = StringIO(data)
# print(xmlstring)
# Handler = MyHandler().parse(xmlstring)
Specifically, due to the quoting in the CSV file (which is
beyond my control), I have had to resort to slicing the string
(line 51) and then formatting it (line 52).
However the print out from the above attempt is as follows:
"<Response TransactionID="2"
RequestType="HoldInquiry"><ShareList>0000'
<Response TransactionID="2"
RequestType="HoldInquiry"><ShareList>0000
File "<string>", line unknown
ParseError: no element found: line 1, column 69
Interestingly - if I assign the variable "data" (as in line
54) I receive this:
File "<ipython-input-80-7357c9272b92>", line 56
data = '<Response TransactionID="2"
RequestType="HoldInquiry"><ShareList>0000',0001,0070,</ShareList></Response>'
^
SyntaxError: invalid token
I seek feedback and information on how to address utilizing
the most Pythonic means to do so. Ideally, is there a method
that can leverage ElementTree. Thank you, in advance, for your
feedback and guidance.
In fact to get rid of double quote simply create your csv reader
like that:
reader = csv.DictReader(data, dialect='excel', skipinitialspace=True)
You should then don't need to slice data variable and reformat it.
Karim
--
https://mail.python.org/mailman/listinfo/python-list