當前位置:首頁 » 編程語言 » xmlpython命名空間

xmlpython命名空間

發布時間: 2022-02-25 06:59:05

python命名空間是什麼

在Python中,所有的名字都存在一個空間中,它們在該空間中存在和被操作——這就是命名空間。它就像一個盒子,每一個變數名字都對應裝著一個對象。當查詢變數的時候,會從該盒子裡面找到相應的對象。

【定義】

名稱到對象的映射。命名空間是一個字典的實現,鍵為變數名,值是變數對應的值。各個命名空間是獨立沒有關系的,一個命名空間中不能有重名,但是不同的命名空間可以重名而沒有任何影響。

相關推薦:《Python教程》

【分類】

python程序執行期間會有2個或3個活動的命名空間(函數調用時有3個,函數調用結束後2個)。按照變數定義的位置,可以劃分為以下3類:

Local,局部命名空間,每個函數所擁有的命名空間,記錄了函數中定義的所有變數,包括函數的入參、內部定義的局部變數。

Global,全局命名空間,每個模塊載入執行時創建的,記錄了模塊中定義的變數,包括模塊中定義的函數、類、其他導入的模塊、模塊級的變數與常量。

Built-in,python自帶的內建命名空間,任何模塊均可以訪問,放著內置的函數和異常。

【生命周期】

Local(局部命名空間)在函數被調用時才被創建,但函數返回結果或拋出異常時被刪除。(每一個遞歸函數都擁有自己的命名空間)。

Global(全局命名空間)在模塊被載入時創建,通常一直保留直到python解釋器退出。

Built-in(內建命名空間)在python解釋器啟動時創建,一直保留直到解釋器退出。

各命名空間創建順序:python解釋器啟動 ->創建內建命名空間 -> 載入模塊 -> 創建全局命名空間 ->函數被調用 ->創建局部命名空間

各命名空間銷毀順序:函數調用結束 -> 銷毀函數對應的局部命名空間 -> python虛擬機(解釋器)退出 ->銷毀全局命名空間 ->銷毀內建命名空間

python解釋器載入階段會創建出內建命名空間、模塊的全局命名空間,局部命名空間是在運行階段函數被調用時動態創建出來的,函數調用結束動態的銷毀的。

❷ 怎麼用python獲取一段帶有命名空間的xml

截取從<soap:Body>的index到</soap:Body>的index的字元串就OK了

❸ 如何用python解析帶有命名空間的xml文件

大概一般人也不會在程序里去直接修改名字空間里的內容 舉個栗子 >>> globals(){'__builtins__': , '__name__': '__main__', '__doc__': None, '__package__': None}>>> globals()['name'] = 'bigbang'>>> globals(){'__builtins__': ,

❹ python怎麼處理xml節點包含命名空間,也就是冒號的情況

a:b為名不行吧,要展開為{URI}b這種形式,看看下面小例子取出的tag名稱:

# -*- coding: utf-8 -*-

from xml.etree import ElementTree as ET
import cStringIO

xml = """\
<?xml version="1.0"?>
<root xmlns = "http://default-namespace.org/"
xmlns:py = "http://www.python.org/ns/">
<py:elem1 />
<elem2 xmlns="" />
</root>
"""
f = cStringIO.StringIO(xml)

#find all elements and print tag's name.
tree = ET.parse(f)
print repr(tree.getroot().tag)
elems = tree.findall('.//*')
for elem in elems:
print repr(elem.tag)

#same as above, but using iterparse.
f.seek(0)
for event, elem in ET.iterparse(f, ("start",)):
print repr(elem.tag)

輸出:
'{http://default-namespace.org/}root'
'{http://www.python.org/ns/}elem1'
'elem2'
'{http://default-namespace.org/}root'
'{http://www.python.org/ns/}elem1'
'elem2'

❺ Python語言中命名空間的使用

如果一個命名聲明為全局的,那麼對它的所有引用和賦值會直接搜索包含這個模塊全局命名的作用域。如果要重新綁定最里層作用域之外的變數,可以使用 nonlocal 語句;如果不聲明為 nonlocal,這些變數將是只讀的(對這樣的變數賦值會在最裡面的作用域創建一個新的局部變數,外部具有相同命名的那個變數不會改變)。
通常,局部作用域引用當前函數的命名。在函數之外,局部作用域與全局使用域引用同一命名空間:模塊命名空間。類定義也是局部作用域中的另一個命名空間。
重要的是作用域決定於源程序的意義:一個定義於某模塊中的函數的全局作用域是該模塊的命名空間,而不是該函數的別名被定義或調用的位置,了解這一點非常重要。另一方面,命名的實際搜索過程是動態的,在運行時確定的——然而,Python 語言也在不斷發展,以後有可能會成為靜態的「編譯」時確定,所以不要依賴動態解析!(事實上,局部變數已經是靜態確定了。)
Python 的一個特別之處在於:如果沒有使用 global 語法,其賦值操作總是在最里層的作用域。賦值不會復制數據,只是將命名綁定到對象。刪除也是如此:del x 只是從局部作用域的命名空間中刪除命名 x 。事實上,所有引入新命名的操作都作用於局部作用域。特別是 import 語句和函數定義將模塊名或函數綁定於局部作用域(可以使用 global 語句將變數引入到全局作用域)。
global 語句用以指明某個特定的變數為全局作用域,並重新綁定它。nonlocal 語句用以指明某個特定的變數為封閉作用域,並重新綁定它。

❻ python中怎樣查看已載入的命名空間中所有變數和函數

globals()和locals()函數的返回值是一個字典,包含命名空間的所有變數名和對應的值(比如字元串、字典、列表、函數、模塊),globals()是全局命名空間,locals()是局部命名空間,全局指這個模塊,局部可以是函數、類、閉包。調用dir()函數傳參或者不傳,它的返回值就是這倆函數返回值的鍵組成的列表。

❼ Python lxml所有與多個命名空間問題,怎麼解決

有如下xml

<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>

其中的xmlns屬性表示的是該xml的默認命名空間,該命名空間必須是一個url形式
查看xml的tag

#encoding=utf8

from lxml import etree

str_xml = """
<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""

xml = etree.fromstring(str_xml)
for node in xml.iter():
print node.tag

結果為:
{http://This/is/a/namespace}A
{http://This/is/a/namespace}B
{http://This/is/a/namespace}B
{http://This/is/a/namespace}B
{http://This/is/a/namespace}C

可以看到,跟普通xml的tag相比每個tag前面都多出了一個命名空間

獲取命名空間 .nsmap

from lxml import etree

str_xml = """
<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""

xml = etree.fromstring(str_xml)
ns = xml.nsmap
print ns
print ns[None]

結果
{None: 'http://This/is/a/namespace'}
http://This/is/a/namespace

ns[None]獲取的是默認命名空間,ns會顯示所有的命名空間

獲取有命名空間的節點內容

from lxml import etree

str_xml = """
<A xmlns="http://This/is/a/namespace">
<B>dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""

xml = etree.fromstring(str_xml)
ns = xml.nsmap[None]
ns = "{%s}" % ns
for item in xml.findall("{0}B/{0}C".format(ns)): #不能用xpath會出錯
print item.text

結果
dataC

注意,在查找節點時,每一級節點都需要加上命名空間。而且測試時發現,findall可以正常查找到信息,而xpath會報錯。

獲取帶命名空間節點的屬性值

from lxml import etree

str_xml = """
<A xmlns="http://This/is/a/namespace">
<B b="123">dataB1</B>
<B>dataB2</B>
<B>
<C>dataC</C>
</B>
</A>
"""

xml = etree.fromstring(str_xml)
ns = xml.nsmap[None]
ns = "{%s}" % ns

item = xml.find(ns+"B")
print item.get("b")
print item.text

結果
123
dataB1

可以看到,獲取屬性時,不需要加命名空間,直接獲取即可

❽ Python中的命名空間是什麼

編程語言中的命名空間簡單來說就是一些詞的集合,
同一個詞在不同的命名空間會有不同的意思,
用一個詞來做例子
「手紙」在中文這個命名空間是廁紙的意思,
而在日文這個命名空間是信的意思。

這個算是過分簡化的說明了。

❾ python處理是Xml文件的,刪除標簽屬性符合條件的!如<data name="test"id="

你可以使用 BeautifulSoup 套件:
安裝:
pip install bs4

如果覺得 html 解析器不敷使用,參考文檔安裝其他適合的解析器。
如果想要詳細了解 BeautifulSoup 也請參考官方文檔(有中文版本)。
測試檔:
以下是我使用的測試文件:
# delete.txt
126
147

# test.xml
<re>
<id>123</id>
<name>abc</name>
</re>
<re>
<id>126</id>
<name>abc</name>
</re>
<re>
<id>135</id>
<name>abc</name>
</re>
<re>
<id>147</id>
<name>abc</name>
</re>

代碼:
from bs4 import BeautifulSoup

with open('test.xml') as reader:
xml = reader.read()

deleted_id = []

with open('delete.txt') as reader:
for line in reader:
line = line.strip()
deleted_id.append(line)

def has_delete_id(tag):
return tag.name=='re' and tag.id.string in deleted_id

soup = BeautifulSoup(xml, 'html.parser')

tags = soup(has_delete_id)
for tag in tags:
tag.decompose()

print(soup.prettify())

程式輸出:
<re>
<id>
123
</id>
<name>
abc
</name>
</re>
<re>
<id>
135
</id>
<name>
abc
</name>
</re>

代碼說明:
首先我們從 Beautiful Soup 的套件中匯入 BeautifulSoup 類
from bs4 import BeautifulSoup

接著分別從 delete.txt 和 test.xml 中讀出要刪除的 id 和主要的 xml 內容,下一步是實體化生成一個 BeautifulSoup對象 soup, 我們採用 html.parser 解析器去解析 xml:
soup = BeautifulSoup(xml, 'html.parser')

在此我們定義了一個用於過濾的 function has_delete_id,每一個在 xml 中的tag 只要是 <re> tag 且含有想要刪除的 <id> tag 就會被檢索出來:
def has_delete_id(tag):
return tag.name=='re' and tag.id.string in deleted_id

接著 soup(has_delete_id) 會幫助我們找到欲刪除的 tag,接著走訪搜索出來的這些 tag 並呼叫方法 decompose() 來從文件中刪除該標簽。
最後 soup.prettify()可以幫助我們輸出修改後的文件。

熱點內容
java如何運行程序 發布:2025-01-10 07:25:53 瀏覽:562
冒險島電腦連接伺服器失敗 發布:2025-01-10 07:23:01 瀏覽:823
安卓開發要學什麼語言 發布:2025-01-10 07:21:30 瀏覽:20
紹興編程培訓 發布:2025-01-10 07:16:53 瀏覽:300
java介面和類 發布:2025-01-10 07:09:14 瀏覽:403
discuzforlinux安裝 發布:2025-01-10 07:09:10 瀏覽:229
招行支票密碼器口令是多少 發布:2025-01-10 06:55:27 瀏覽:353
好的解壓拓展實力怎麼樣 發布:2025-01-10 06:49:18 瀏覽:699
租伺服器會自帶公網ip么 發布:2025-01-10 06:49:17 瀏覽:348
mfc中ftp上傳與下載 發布:2025-01-10 06:47:06 瀏覽:349