\ X UNIX命令我想用Python代碼來執行命令如何處理具有Python代碼
sed -e 's/\x0//g' file.xml
。
但收到錯誤ValueError異常:invalid \x escape
\ X UNIX命令我想用Python代碼來執行命令如何處理具有Python代碼
sed -e 's/\x0//g' file.xml
。
但收到錯誤ValueError異常:invalid \x escape
十六進制轉義在Python需要兩個十六進制數字。
\x00
但我只想執行「sed -e's/\ x0 // g'file.xml」,這幫助我從xml文件中刪除無效字符。我不需要一個十六進制。 – 2014-12-06 06:23:24
然後你需要告訴Python。 – 2014-12-06 06:23:41
但我怎麼能告訴python? – 2014-12-06 06:25:52
你是不是顯示你的Python代碼,因此有炒作的空間在這裏。
但首先,爲什麼文件首先包含空字節?這不是有效的XML文件。你能解決生成這個文件的過程嗎?
其次,你爲什麼想用sed
來做到這一點?你已經在使用Python;使用它的原生函數進行這種處理。如果您希望在逐行讀取文件中的行,像
with open('file.xml', 'r') as xml:
for line in xml:
line = line.replace('\x00', '')
# ... your processing here
的東西,或者如果你希望整個文件作爲一個長字節的字符串:
with open('file.xml', 'r') as handle:
xml = handle.read()
xml = xml.replace('\x00', '')
如果你確實想使用外部程序,tr
會比sed
更自然。準確使用什麼語法取決於tr
或sed
的方言,但基本問題是Python字符串中的反斜槓由Python解釋。如果涉及shell,則還需要考慮shell的處理。但簡單來說,試試這個:
os.system("sed -e 's/\\x0//g' file.xml")
或本:
os.system(r"sed -e 's/\x0//g' file.xml")
這裏,雙引號內的單引號,因爲shell解釋這是必需的。如果使用另一種引用形式,則需要了解該引用機制下的shell行爲,以及它如何與Python引用進行交互。但你並不真的在這裏需要一個殼擺在首位,而我在現實中猜你可能處理看上去更像是這樣的:
sed = subprocess.Popen(['sed', '-e', r's/\x0//g', 'file.xml'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result, err = sed.communicate()
因爲沒有外殼這裏涉及到,所有你需要擔心是Python的引用。就像以前一樣,您可以將字面反斜槓轉換爲sed
,方法是將其加倍或使用r'...'
原始字符串。
請將您的python代碼和示例內容粘貼到file.xml中。 – BMW 2014-12-06 06:09:11