回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我需要在windows msinfo文件(.nfo)中搜索某些行并将它们打印到文本小部件中。我可以<code>print(line)</code>在文件中的任何一行,我可以将每一行输出到文本小部件,但一旦我尝试指定要输出的行,它就停止工作。我假设这是因为文件是一个XML,但是我看到的python的XML解析工具似乎在寻找data=blah这样的行。当我在txt编辑器中打开它们时,我要查找的条目如下所示:</p>
<pre><code> <Category name="Disks">
<Data>
<Item><![CDATA[Description]]></Item>
<Value><![CDATA[Disk drive]]></Value>
</Data>
<Data>
<Item><![CDATA[Manufacturer]]></Item>
<Value><![CDATA[(Standard disk drives)]]></Value>
</Data>
<Data>
<Item><![CDATA[Model]]></Item>
<Value><![CDATA[TOSHIB MK1652GSX SCSI Disk Device]]></Value>
</Data>
<Data>
<Item><![CDATA[Bytes/Sector]]></Item>
<Value><![CDATA[512]]></Value>
</Data>
<Data>
<Item><![CDATA[Media Loaded]]></Item>
<Value><![CDATA[Yes]]></Value>
</Data>
<Data>
<Item><![CDATA[Media Type]]></Item>
<Value><![CDATA[Fixed hard disk]]></Value>
</Data>
<Data>
<Item><![CDATA[Partitions]]></Item>
<Value><![CDATA[2]]></Value>
</Data>
<Data>
<Item><![CDATA[SCSI Bus]]></Item>
<Value><![CDATA[1]]></Value>
</Data>
<Data>
<Item><![CDATA[SCSI Logical Unit]]></Item>
<Value><![CDATA[0]]></Value>
</Data>
<Data>
<Item><![CDATA[SCSI Port]]></Item>
<Value><![CDATA[0]]></Value>
</Data>
<Data>
<Item><![CDATA[SCSI Target ID]]></Item>
<Value><![CDATA[0]]></Value>
</Data>
<Data>
<Item><![CDATA[Sectors/Track]]></Item>
<Value><![CDATA[63]]></Value>
</Data>
<Data>
<Item><![CDATA[Size]]></Item>
<Value><![CDATA[149.05 GB (160,039,272,960 bytes)]]></Value>
</Data>
<Data>
<Item><![CDATA[Total Cylinders]]></Item>
<Value><![CDATA[19,457]]></Value>
</Data>
<Data>
<Item><![CDATA[Total Sectors]]></Item>
<Value><![CDATA[312,576,705]]></Value>
</Data>
<Data>
<Item><![CDATA[Total Tracks]]></Item>
<Value><![CDATA[4,961,535]]></Value>
</Data>
<Data>
<Item><![CDATA[Tracks/Cylinder]]></Item>
<Value><![CDATA[255]]></Value>
</Data>
<Data>
<Item><![CDATA[Partition]]></Item>
<Value><![CDATA[Disk #1, Partition #0]]></Value>
</Data>
<Data>
<Item><![CDATA[Partition Size]]></Item>
<Value><![CDATA[117.19 GB (125,830,301,184 bytes)]]></Value>
</Data>
<Data>
<Item><![CDATA[Partition Starting Offset]]></Item>
<Value><![CDATA[32,256 bytes]]></Value>
</Data>
<Data>
<Item><![CDATA[Partition]]></Item>
<Value><![CDATA[Disk #1, Partition #1]]></Value>
</Data>
<Data>
<Item><![CDATA[Partition Size]]></Item>
<Value><![CDATA[31.85 GB (34,200,714,240 bytes)]]></Value>
</Data>
<Data>
<Item><![CDATA[Partition Starting Offset]]></Item>
<Value><![CDATA[125,830,333,440 bytes]]></Value>
</Data>
<Data>
</code></pre>
<p>我发现一个<a href="https://stackoverflow.com/questions/34070729/parse-a-nfo-file-with-python/34071854">post</a>在问我想要什么,但解决方案不起作用。这个ET.解析找不到:</p>
^{pr2}$
<p>当我使用上述方法时:</p>
<blockquote>
<p>"C:\Program Files (x86)\Python35-32\python.exe" "D:/MY
STUFF/Programming/Python/testing.py" Traceback (most recent call
last): File "D:/MY STUFF/Programming/Python/testing.py", line 3, in
tree = ET.parse(file) AttributeError: module 'xml.etree' has no attribute 'parse'</p>
<p>Process finished with exit code 1</p>
</blockquote>
<p>这是我的代码片段:</p>
<pre><code>try:
u = find("msinfo.nfo", s)
for i in u:
cpfotxt.insert('end', i + "\n")
cpfotxt.yview(END)
cpfotxt.insert('end', "================================= \n")
with open(i, "r") as f:
r = f.readlines()
for line in r:
if "Model" in line:
cpfotxt.insert('end', line + "\n")
</code></pre>
<p>如果我删除<code>if "Model" in line:</code>,那么它将把所有内容都转储到文本小部件中。在</p>
<p>这是在windows上正常打开时的外观:</p><p>
<a href="https://i.stack.imgur.com/cx4UV.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/cx4UV.png" alt="enter image description here"/></a></p>
<p>关于如何从nfo/XML文件中提取行有什么建议吗?在</p>
<p>另外,当从xml打印行时,字体更大,并且是双倍行距。我如何使这行打印的方式,它将从一个普通的txt文件?在</p>