我正在尝试使用unicode文件名运行subprocess.call(),这里是简化的问题:
n = u'c:\\windows\\notepad.exe '
f = u'c:\\temp\\nèw.txt'
subprocess.call(n + f)
Run Code Online (Sandbox Code Playgroud)
这提出了一个着名的错误:
UnicodeEncodeError:'ascii'编解码器不能编码字符u'\ xe8'
对utf-8进行编码会产生错误的文件名,而mbcs会将文件名作为new.txt传递而不需要重音
我只是无法阅读这个令人困惑的主题并旋转圈.我在这里找到了很多不同问题的答案,所以我想加入并自己寻求帮助
谢谢
今天我尝试了 lxml,因为我从特定的 web 服务中得到了非常讨厌的 html 输出,我不想使用 re 模块,只是为了改变和学习新的东西。我做到了,并行浏览http://codespeak.net/lxml/和http://stackoverflow.com
我不会试图解释上面的 html 模板,但只是为了概述它充满了故意嵌套的表格。
我用 html 解析器提取了感兴趣的部分,然后 find_class() 并用 xpath 遍历 TR(甚至这个 TR 里面都有表)。现在我正在尝试根据 class 和 id 属性提取数据对:
代码如下所示:
fragment = root.find_class('foo')
for node in fragment[0].xpath('table[2]/tr'):
name = node.xpath('//div[@id="title"]')
value = node.xpath('//td[@class="text"]')
Run Code Online (Sandbox Code Playgroud)
问题是并非我迭代的每个 TR 都有这些对:有些只有名称(id“title”),所以稍后当我尝试压缩它们时,我得到了错误的配对数据。
我尝试了几件事,但没有成功:我尝试比较列表长度(名称和值),如果它们不匹配跳过名称查找,那么如果它们不匹配,则删除最后一个列表项(在很多方面)但没有任何效果。例如:
if not len(name) == len(value):
name.pop()
Run Code Online (Sandbox Code Playgroud)
或者
if len(name) == len(value):
name = node.xpath('//div[@id="title"]')
value = node.xpath('//td[@class="text"]')
Run Code Online (Sandbox Code Playgroud)
一些经验丰富的评论?