python - 无法从 Python 中的 XML 文件中读取汉字
问题描述
这是我的xml
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<table rows="3" cols="8" style="" render="1" datatype="2" tabletype="dynamictable1int" primary="" assetClass="Fixed Income" bookName="2015-05-20 LM BW GFI_CN" languageCode="12" languageWord="Chinese">
<tbody>
<row condition="TCH">
<entry></entry>
<entry> 1 个月 </entry>
<entry> 3 个月 </entry>
<entry> 1 年 </entry>
<entry> 3 年 </entry>
<entry> 5 年 </entry>
<entry> 10 年 </entry>
<entry> 从创建之日起 </entry>
</row>
</tbody>
</table>
当我试图通过这个 XMl 运行我得到的值时,
['1 个月', '3 个月', '1 年', '3 年', '5 年', '10 年', '从创建之日起']
我正在使用python3,
table = XMLTable(xml, text_columns='ALL')
categoryNames = row2[0][1:]
当我试图找到 categoryNames 的类型时,我发现它正在返回<class,'str'>
我希望这些字符以中文显示,因为我将它们用作条形图的类别名称,我正在使用 reportlab 生成图表。它呈现的值与我上面显示的值相同。当我使用 python 2.7 运行相同的代码时,它呈现完美。
这是 XMLTable 的代码-
class XMLTable:
error = object() #unique
@verboseError
def __init__(self, xml, text_columns=[], floatDefault=0):
xml = xml.replace('<emphasis>','',1000)
xml = xml.replace('</emphasis>','',1000)
xml = xml.replace('<para>','',1000)
xml = xml.replace('</para>','',1000)
xml = xml.replace('<sub>','',1000)
xml = xml.replace('</sub>','',1000)
xml = xml.replace('<sup>','',1000)
xml = xml.replace('</sup>','',1000)
xml = xml.replace('<superscript>','',1000)
xml = xml.replace('</superscript>','',1000)
xml = xml.replace('<emphasis>','',1000)
xml = xml.replace('</emphasis>','',1000)
xml = xml.replace('<sbr>','',1000)
xml = xml.replace('</sbr>','',1000)
self.xml = xml
self.data = []
#print xml
#pdb.set_trace()
self.tree = pyRXPU.Parser().parse(xml)
self.tags = dict()
self.tags.update(self.tree[1])
self.tableTag = NonEscapingTagWrapper(self.tree)
if hasattr(self.tableTag, 'assetClass'):
self.assetClass = self.tableTag.assetClass
else:
self.assetClass = None
for i, row in enumerate(self.tableTag.tbody):
if hasattr(row, 'selrow') and row.selrow == '0': continue
newRow = []
for col_no, entry in enumerate(row):
if hasattr(entry, 'selcol') and entry.selcol == '0':
continue
value = stripTags(tt2xml(entry._children))
if text_columns != 'ALL':
if col_no not in text_columns:
v = re.sub(r"[^-\d\.]",'', value)
try:
value = float(v)
except ValueError:
if floatDefault is XMLTable.error:
annotateException('\nrow=%d col=%d value=%r cannot be converted to float' % (i,col_no,value))
else:
value = floatDefault
newRow.append(value)
self.data.append(newRow)
@verboseError
def getFormat(self, row, col):
value = str(self.tableTag.tbody[row][col])
return getNumberFormat(value)
@verboseError
def __len__(self):
return len(self.data)
@verboseError
def __iter__(self):
return self.data.__iter__()
@verboseError
def __getitem__(self, key):
if isinstance(key, int):
return self.data[key]
elif isinstance(key, slice):
return self.data[key]
else:
return self.tags[key]
@verboseError
def __setitem__(self, key, item):
if isinstance(key, int):
self.data[key] = item
elif isinstance(key, slice):
self.data[key] = item
else:
self.tags[key] = item
@verboseError
def __delitem__(self, key):
if isinstance(key, int):
del self.data[key]
elif isinstance(key, slice):
del self.data[key]
else:
del self.tags[key]
@verboseError
def keys(self):
return self.tags.keys()
@verboseError
def items(self):
return self.tags.items()
@verboseError
def get(self, key, default=None):
if key in self.tags.keys():
return self.tags[key]
if default:
return default
raise KeyError('there is no such key %s'%key)
@verboseError
def __str__(self):
return self.xml
@verboseError
def __repr__(self):
return str(self.tree)
@verboseError
def clean(self, remove_if_zeros=None):
for row in self.data:
if row[remove_if_zeros] == 0:
self.data.remove(row)
return self
解决方案
您是否尝试过以编码格式打开 xml 文件?例如。文件名:abc.xml
xml = open(abc, encoding="utf-8").read()
这对我有用。
推荐阅读
- excel - 需要 VBScript 以相对目录或替代方式将 BAS 文件导入 Excel
- javascript - 如何使用 lambda 中的 javascript 在 aws codecommit 中创建一个存储库?
- visual-studio-app-center-distribute - 是否可以在 AppCenter 中构建和分发模拟器构建?
- java - 如何在java中垂直绘制图形?
- css - Vuetify - 在 v-card 中水平居中 v-progress-linear
- xml - 根据关键字/分隔符将元素中的文本拆分为多个元素
- python - 使用来自环境而不是数据库的气流连接
- python - 如何将文本清理步骤压缩为单个 Python 函数?
- kubernetes - 对 config-autoscaler configmap 的编辑会在应用更改后几分钟自动恢复
- ios - iOS - 应用程序终止时开始监控重大位置变化 - 不工作