基本Python文件搜索和I/O

基本Python文件搜索和I/O,python,xml,file,search,text,Python,Xml,File,Search,Text,我正在尝试用Python完成一项简单的任务,我对该语言是新手(我是C++)。我希望有人能给我指出正确的方向 问题: 我有一个充满数据的XML文件(12mb),文件中有开始标记“xmltag”和结束标记“/xmltag”,它们表示我要提取的数据部分的开始和结束 我希望通过一个循环浏览这个打开的文件,并为每个实例找到一个开始标记,并将节中的数据复制到一个新文件,直到结束标记。然后,我想在文件末尾重复这一点 我对文件I/O很满意,但不是最有效的数据循环、搜索和提取 我真的很喜欢这种语言的外观,希望我能

我正在尝试用Python完成一项简单的任务,我对该语言是新手(我是C++)。我希望有人能给我指出正确的方向

问题: 我有一个充满数据的XML文件(12mb),文件中有开始标记“xmltag”和结束标记“/xmltag”,它们表示我要提取的数据部分的开始和结束

我希望通过一个循环浏览这个打开的文件,并为每个实例找到一个开始标记,并将节中的数据复制到一个新文件,直到结束标记。然后,我想在文件末尾重复这一点

我对文件I/O很满意,但不是最有效的数据循环、搜索和提取

我真的很喜欢这种语言的外观,希望我能更多地参与其中,这样我就能回馈社区

非常感谢

检查


深入了解Python 3有一个关于这方面的精彩章节:

这是一本关于python的免费好书,值得一读

xml=open(“xmlfile”).read()
xml=open("xmlfile").read()
x=xml.split("</xmltag>")
for block in x:
    if "<xmltag>" in block:
        print block.split("<xmltag>")[-1]
x=xml.split(“”) 对于x中的块: 如果块中有“”: 打印块拆分(“”[-1]
无需安装BeautifulSoup,Python在其标准库中包含ElementTree解析器

from xml.etree import cElementTree as ET
tree = ET.parse('myfilename')
new_tree = ET('new_root_element')
for element in tree.findall('.//xmltag'):
    new_tree.append(tree.element)
print ET.tostring(new_tree)

BeautifulSoup答案很好,但执行速度更快,不需要外部库:

import xml.etree.cElementTree as ET
tree = ET.parse('xmlfile.xml')
results = (elem for elem in tree.getiterator('xmltag'))

# in Python 2.7+, getiterator() is deprecated; use tree.iter('xmltag')

好是主观的!需求很简单,使用简单的Python字符串方法就足够了。OP没有说明
xmltag
是否有一些属性。没错。除了想找到指定标记的开始和结束外,他没有说明任何其他内容。有了这些信息,我的解决方案简单明了,不需要下载任何东西,至少现在是这样。然后就可以了。但主观上还是不好;-)不,客观上这不好。这只是一个“简单的要求”,因为OP不理解XML。任何使使用字符串操作来处理XML的想法永久化的东西,就像这个想法本身一样,都是错误的,除非需求中的具体细节另有说明。
import xml.etree.cElementTree as ET
tree = ET.parse('xmlfile.xml')
results = (elem for elem in tree.getiterator('xmltag'))

# in Python 2.7+, getiterator() is deprecated; use tree.iter('xmltag')