0

私はPythonで次のことをしようとしています。

次の内容のファイルがあります...

<VirtualHost>
  ServerName blah.com
  DocumentRoot /var/www/blah.com
</Virtualhost>

<VirtualHost>
  ServerName blah2.com
  DocumentRoot /var/www/blah2.com
</Virtualhost>

... etc

これらの仮想ホストコンテナのそれぞれを取得して、別々のファイル(または変数と私はそこから作業できます)に配置したいと思います...

文字列の間にデータを取り込むことができましたが、文字列は含まれていません。したがって、出力は...

<VirtualHost>
  ServerName blah2.com
  DocumentRoot /var/www/blah2.com
</Virtualhost>

...iterated through each container and not...
ServerName blah2.com
DocumentRoot /var/www/blah2.com

これが簡単にできることであるかどうか教えてください。ありがとう!

4

2 に答える 2

0

findall 正規表現が機能する可能性があります。

import re

d = """
<VirtualHost>
  ServerName blah.com
  DocumentRoot /var/www/blah.com
</Virtualhost>
<VirtualHost>
  ServerName blah2.com
  DocumentRoot /var/www/blah2.com
</Virtualhost>
"""

matches = re.findall(r'<VirtualHost>(.*?)</Virtualhost>', d, re.I|re.DOTALL)

#['\n  ServerName blah.com\n  DocumentRoot /var/www/blah.com\n',
# '\n  ServerName blah2.com\n  DocumentRoot /var/www/blah2.com\n']

または、<VirtualHost>パーツを含めるには:

matches = re.findall(r'<VirtualHost>.*?</Virtualhost>', d, re.I|re.DOTALL)

#['<VirtualHost>\n  ServerName blah.com\n  DocumentRoot /var/www/blah.com\n</Virtualhost>',
# '<VirtualHost>\n  ServerName blah2.com\n  DocumentRoot /var/www/blah2.com\n</Virtualhost>']
于 2012-08-19T01:44:33.473 に答える
0

入力データが XML であると仮定すると、minidom (@Aesthete で提案) またはElementTreeを使用できます。

import xml.dom.minidom as MD
import xml.etree.ElementTree as ET

input = """
<Document>
    <VirtualHost>
        ServerName blah.com
        DocumentRoot /var/www/blah.com
    </VirtualHost>
    <VirtualHost>
        ServerName blah2.com
        DocumentRoot /var/www/blah2.com
    </VirtualHost>
</Document>"""

domDoc = MD.parseString(input)
etreeDoc = ET.fromstring(input)

# list for Python 3.x
miniDomOutput = list(map(lambda f: f.toxml(), domDoc.getElementsByTagName('VirtualHost')))
elementTreeOutput = list(map(lambda f: ET.tostring(f), etreeDoc.findall('VirtualHost')))

print(miniDomOutput)
print(elementTreeOutput)

出力:

#['<VirtualHost>\n        ServerName blah.com\n        DocumentRoot /var/www/blah.com\n    </VirtualHost>', '<VirtualHost>\n        ServerName blah2.com\n        DocumentRoot /var/www/blah2.com\n    </VirtualHost>']
#[b'<VirtualHost>\n        ServerName blah.com\n        DocumentRoot /var/www/blah.com\n    </VirtualHost>\n    ', b'<VirtualHost>\n        ServerName blah2.com\n        DocumentRoot /var/www/blah2.com\n    </VirtualHost>\n']
于 2012-08-19T15:40:01.080 に答える