我需要等到文件创建然后读入.我有以下代码,但确定它不起作用:
import os.path
if os.path.isfile(file_path):
read file in
else:
wait
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
我有这个代码:
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) 我有一个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)
那么如何在我的脚本中添加代码来删除命名空间和前缀呢?
我有一个有序的字典,想要改变个别订单.在下面的代码示例中,我希望项目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) 我有一个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) 我试图打开一个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获取我需要的标记值?
我试图使用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中运行,我知道目录路径,斜杠等.
我正在通过从列表中添加一些节点和值来更改一些 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) 您有一个应用程序,有时报告文件不存在,即使它,我使用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脚本中有这一行:
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 ×10
lxml ×5
xml ×5
namespaces ×2
collections ×1
encoding ×1
macos ×1
os.path ×1
parsing ×1
popen ×1
pretty-print ×1
unicode ×1
wildcard ×1
xml-parsing ×1