小编spe*_*zor的帖子

检查并等待文件存在以进行读取

我需要等到文件创建然后读入.我有以下代码,但确定它不起作用:

import os.path
if os.path.isfile(file_path):
    read file in
else:
    wait
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

python

44
推荐指数
2
解决办法
6万
查看次数

UnicodeEncodeError:'ascii'编解码器无法编码位置7中的字符u'\ xe9':序数不在范围内(128)

我有这个代码:

    printinfo = title + "\t" + old_vendor_id + "\t" + apple_id + '\n'
    # Write file
    f.write (printinfo + '\n')
Run Code Online (Sandbox Code Playgroud)

但是我在运行时遇到这个错误:

    f.write(printinfo + '\n')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 7: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

它正在编写这个:

Identité secrète (Abduction) [VF]
Run Code Online (Sandbox Code Playgroud)

请任何想法,不知道如何解决.

干杯.

更新:这是我的大部分代码,所以你可以看到我在做什么:

def runLookupEdit(self, event):
    newpath1 = pathindir + "/"
    errorFileOut = newpath1 + "REPORT.csv"
    f = open(errorFileOut, 'w')

global old_vendor_id

for old_vendor_id in vendorIdsIn.splitlines():
    writeErrorFile = 0
    from lxml import etree
    parser = etree.XMLParser(remove_blank_text=True) …
Run Code Online (Sandbox Code Playgroud)

python xml unicode encoding python-unicode

37
推荐指数
1
解决办法
13万
查看次数

使用lxml从python中的xml中删除命名空间和前缀

我有一个xml文件,我需要打开并进行一些更改,其中一个更改是删除命名空间和前缀,然后保存到另一个文件.这是xml:

<?xml version='1.0' encoding='UTF-8'?>
<package xmlns="http://apple.com/itunes/importer">
  <provider>some data</provider>
  <language>en-GB</language>
</package>
Run Code Online (Sandbox Code Playgroud)

我可以进行其他需要的更改,但无法找到如何删除命名空间和前缀.这是我需要的reusklt xml:

<?xml version='1.0' encoding='UTF-8'?>
<package>
  <provider>some data</provider>
  <language>en-GB</language>
</package>
Run Code Online (Sandbox Code Playgroud)

这是我的脚本,它将打开并解析xml并保存它:

metadata = '/Users/user1/Desktop/Python/metadata.xml'
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
open(metadata)
tree = etree.parse(metadata, parser)
root = tree.getroot()
tree.write('/Users/user1/Desktop/Python/done.xml', pretty_print = True, xml_declaration = True, encoding = 'UTF-8')
Run Code Online (Sandbox Code Playgroud)

那么如何在我的脚本中添加代码来删除命名空间和前缀呢?

python xml lxml namespaces

15
推荐指数
4
解决办法
3万
查看次数

在python中改变有序字典的顺序

我有一个有序的字典,想要改变个别订单.在下面的代码示例中,我希望项目3(人员)及其值移动到位置2.因此,顺序将是动物,人,食物,饮料.我怎么去他的?

import collections

queue = collections.OrderedDict()

queue["animals"] = ["cat", "dog", "fish"]
queue["food"] = ["cake", "cheese", "bread"]
queue["people"] = ["john", "henry", "mike"]
queue["drinks"] = ["water", "coke", "juice"]

print queue
Run Code Online (Sandbox Code Playgroud)

python collections ordereddictionary

12
推荐指数
2
解决办法
9434
查看次数

XML Declaration standalone ="yes"lxml

我有一个xml我正在解析,进行一些更改并保存到一个新文件.它有<?xml version="1.0" encoding="utf-8" standalone="yes"?>我想保留的声明.当我保存我的新文件时,我失去了standalone="yes"一点.我该如何保管?这是我的代码:

templateXml = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<package>
  <provider>Some Data</provider>
  <studio_display_name>Some Other Data</studio_display_name>
</package>"""

from lxml import etree
tree = etree.fromstring(templateXml)

xmlFileOut = '/Users/User1/Desktop/Python/Done.xml'   

with open(xmlFileOut, "w") as f:
    f.write(etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8'))
Run Code Online (Sandbox Code Playgroud)

python xml parsing lxml xml-parsing

11
推荐指数
2
解决办法
1万
查看次数

xmlns命名空间破坏lxml

我试图打开一个xml文件,并从某些标签获取值.我做了很多,但这个特殊的xml给了我一些问题.这是xml文件的一部分:

<?xml version='1.0' encoding='UTF-8'?>
<package xmlns="http://apple.com/itunes/importer" version="film4.7">
  <provider>filmgroup</provider>
  <language>en-GB</language>
  <actor name="John Smith" display="Doe John"</actor>
</package>
Run Code Online (Sandbox Code Playgroud)

这是我的python代码示例:

metadata = '/Users/mylaptop/Desktop/Python/metadata.xml'
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
open(metadata)
tree = etree.parse(metadata, parser)
root = tree.getroot()
for element in root.iter(tag='provider'):
    providerValue = tree.find('//provider')
    providerValue = providerValue.text
    print providerValue
tree.write('/Users/mylaptop/Desktop/Python/metadataDone.xml', pretty_print = True, xml_declaration = True, encoding = 'UTF-8')
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它找不到提供者标签或其值.如果我xmlns="http://apple.com/itunes/importer"按预期删除所有工作.我的问题是如何删除这个命名空间,因为我对此并不感兴趣,所以我可以使用lxml获取我需要的标记值?

python lxml namespaces xml-namespaces

6
推荐指数
1
解决办法
6767
查看次数

Python Popen shell = False导致OSError:[Errno 2]没有这样的文件或目录

我试图使用shell = False在OSX中运行下面的Popen命令:

command = "/usr/local/itms/share/iTMSTransporter.woa/iTMSTransporter -m verify -f /Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp -u username -p password -o /Volumes/Stuff/Temp/TMP_S_0_V_TV2.itmsp/LOGFILE.txt -s provider -v eXtreme"
self.process1 = Popen(command, shell=False, stdin=PIPE)
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

    raise child_exception
OSError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)

出了什么问题?我也需要这个在Windows中运行,我知道目录路径,斜杠等.

python popen

6
推荐指数
1
解决办法
5876
查看次数

python xml漂亮打印不起作用

我正在通过从列表中添加一些节点和值来更改一些 xml。我可以成功创建所有新标签和值,我在贡献者标签之间创建它们,但是当我将 xml 保存到一个新文件时,我创建的标签都在一行上。这是我的代码示例:

templateXml = """<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<package>
  <delivery_type>new</delivery_type>
  <feature>
    <feature_type>Movie</feature_type>
    <contributors>
    </contributors>
</package>"""

from lxml import etree
tree = etree.fromstring(templateXml)

node_video = tree.xpath('//feature/contributors')[0]
for cast in castList:
    pageElement = etree.SubElement(node_video, 'contributor')
    node_video1 = tree.xpath('//feature/contributors/contributor')[0]
    pageElement.attrib['type'] = 'cast'
    pageElement1 = etree.SubElement(pageElement, 'name')
    pageElement1.text = cast.text
    pageElement2 = etree.SubElement(pageElement, 'role')
    pageElement2.text = "actor"

xmlFileOut = '/Users/User1/Desktop/Python/Done.xml'   

with open(xmlFileOut, "w") as f:
    f.write(etree.tostring(tree, pretty_print = True, xml_declaration = True, encoding='UTF-8', standalone="yes"))
Run Code Online (Sandbox Code Playgroud)

这是保存的xml文件:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<package>
  <delivery_type>new</delivery_type>
  <feature> …
Run Code Online (Sandbox Code Playgroud)

python xml lxml pretty-print

5
推荐指数
1
解决办法
2147
查看次数

当文件存在时,python os.path.exists报告False

您有一个应用程序,有时报告文件不存在,即使它,我使用os.path.exists,该文件是在已安装的网络共享上.我在OSX Yosemite,python 2.7.9上,我有权访问该文件.这是奇怪的事情.下面的第一个命令报告False,然后我再次运行它,但是将文件名中的一个字符更改为小写(TestVendorid_VerifyLog.txt),再次运行它并报告True!然后再次使用大写字母再次运行它(TestVendorId_VerifyLog.txt)并报告True!到底是怎么回事?这是非常一致的,因为它True大部分时间都会返回,但随后突然返回False,然后我可以重复下面的练习.

>>> import os
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt")
False
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorid_VerifyLog.txt")
True
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt")
True
>>> 
Run Code Online (Sandbox Code Playgroud)

更新1:

在报告时True,我运行了这个:

>>> os.stat("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt")
posix.stat_result(st_mode=33216, st_ino=5351561660274954203, st_dev=771751953L, st_nlink=1, st_uid=504, st_gid=20, st_size=38552, st_atime=1428492003, st_mtime=1428589374, st_ctime=1428589374)
Run Code Online (Sandbox Code Playgroud)

更新2:

好的,我现在可以重复这个,它绝对是一个缓存的东西.我在我的本地Mac上删除文件TestVendorId_VerifyLog.txt,然后在另一个工作站上重新创建该文件(该文件在网络共享上)然后在我的Mac上获取False.如果我在os.path.exists命令的文件名中更改了一个字母,它似乎使os.path.exists更难以查找该文件并找到它.所以我需要的是在运行命令之前在python中使用'Refresh Finder'命令.

python macos os.path

5
推荐指数
1
解决办法
3987
查看次数

Python使用通配符在XML中查找标记

我在我的python脚本中有这一行:

url = tree.find("//video/products/product/read_only_info/read_only_value[@key='storeURL-GB']")
Run Code Online (Sandbox Code Playgroud)

但有时storeURL-GB键会更改最后两个国家/地区的代码字母,因此我尝试使用类似的东西,但它不起作用:

url = tree.find("//video/products/product/read_only_info/read_only_value[@key='storeURL-\.*']")
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

python xml lxml wildcard

4
推荐指数
1
解决办法
1047
查看次数