Python读取目录中的大量文件,并进行处理,速度快吗?
我在目录中有将近5000多个xml文件。我计划逐一阅读并解析它们,但我不确定os.listdir(路径)是否是一个好方法Python读取目录中的大量文件,并进行处理,速度快吗?,python,list,directory,Python,List,Directory,我在目录中有将近5000多个xml文件。我计划逐一阅读并解析它们,但我不确定os.listdir(路径)是否是一个好方法 import xml.etree.ElementTree as ET import os list_files = os.listir(os.curdir) for files in list_files: tree = ET.parse(files) root = tree.getroot() listdir(path)返回一个包含该目录中文件名的列表。
import xml.etree.ElementTree as ET
import os
list_files = os.listir(os.curdir)
for files in list_files:
tree = ET.parse(files)
root = tree.getroot()
listdir(path)返回一个包含该目录中文件名的列表。在这之后,使用for循环获取文件的字符串名称并将它们提供给解析器类对象可能不是一个好方法,因为解析器将再次解析文件,第二次,将它们的名称放在同一目录中
有更好的办法吗?我是否丢失了一些东西,可能是用于在目录中查找的指针逻辑
编辑:我认为这个问题离题了,应该删除,因为解析器不会在目录中搜索字符串名称,换句话说,我相信操作系统会在后面处理它。正如您可以在解析器的ET对象中看到的,它将直接打开
请检查这个
蟒蛇3.5:
蟒蛇2:
请检查这个
蟒蛇3.5:
蟒蛇2:
您可以采取以下步骤读取XML文件: 第1步: 解析列表中的所有当前目录XML文件
import xml.etree.ElementTree as ET
import os
items = os.listdir(".")
xmllist = []
for names in items:
if names.endswith(".xml"):
xmllist.append(names)
print(xmllist)
第二步:
现在要读取xmllist文件吗
for files in xmllist:
tree = ET.parse(files)
root = tree.getroot()
print(root)
[注意:如果有更多查询,请留下注释]您可以采取一些步骤来读取XML文件: 第1步: 解析列表中的所有当前目录XML文件
import xml.etree.ElementTree as ET
import os
items = os.listdir(".")
xmllist = []
for names in items:
if names.endswith(".xml"):
xmllist.append(names)
print(xmllist)
第二步:
现在要读取xmllist文件吗
for files in xmllist:
tree = ET.parse(files)
root = tree.getroot()
print(root)
[注意:如果您有更多疑问,请留下评论]也许您可以更清楚地说明您在寻找什么。您的示例解析每个文件(到第一近似值),但您似乎想要找到一个特定的文件。你想建立索引吗?如果不这样做,扫描所有文件似乎是唯一的方法。我想解析所有文件,但在列出并循环查找列表后,它会从列表中提取字符串,并再次在5000+文件目录中搜索,我认为这是有代价的。如果不遍历列表,您还建议如何解析每个文件呢?对于列表中的文件,它不会在路径字符串上循环,因此它会直接转到该文件,解析它并开始读取XML。它不会在任何地方搜索它。如果你想访问所有文件,那么这是最快的方法。也许你可以更清楚地说明你在寻找什么。您的示例解析每个文件(到第一近似值),但您似乎想要找到一个特定的文件。你想建立索引吗?如果不这样做,扫描所有文件似乎是唯一的方法。我想解析所有文件,但在列出并循环查找列表后,它会从列表中提取字符串,并再次在5000+文件目录中搜索,我认为这是有代价的。如果不遍历列表,您还建议如何解析每个文件呢?对于列表中的文件,它不会在路径字符串上循环,因此它会直接转到该文件,解析它并开始读取XML。它不会在任何地方搜索它。如果您想访问所有文件,那么这是最快的方法。我相信您是在告诉我scandir返回了一个很棒的路径对象,我如何才能为xml解析器提供路径?尝试:从操作系统导入scandir,除导入外漫游错误:从scandir导入scandir,漫游定义子目录(路径):“”“给定路径下的Yield目录名称不以“.”开头。“”对于scandir(path)中的条目:if entry.is_file():子目录中i的Yield entry.name(“/tmp”):print I如何才能将path对象提供给xml解析器?我相信您是在告诉我scandir返回了一个很棒的path对象,我如何才能将path提供给xml解析器?尝试:从操作系统导入scandir,除导入外漫游恐怖:从scandir导入scandir,漫游def subdirs(path):“”“给定路径下的Yield目录名称不以“.”开头。“”对于scandir(path)中的条目:if entry.is_file():Yield entry.name for i in subdirs(“/tmp”):print i如何将path对象提供给xml解析器?与问题中的代码有什么区别与问题中的代码有什么区别