python读取文件夹中的所有文件,名为;xyz";

python读取文件夹中的所有文件,名为;xyz";,python,Python,我想读取文件夹中的所有文件,但名为“xyz”的文件除外。当我看到这个文件时,我想跳过它并阅读下一个文件 目前我有以下代码: for file in glob.glob('*.xml'): data = open(file).read() print(file) 显然,这将读取该文件夹中的所有文件。如何跳过文件“xyz.xml”假设要删除的元素在glob.glob()返回的列表中,请尝试此操作(如果不能保证,请将remove()行放入Try块中): 或者,如果您关心内存使用,请使

我想读取文件夹中的所有文件,但名为“xyz”的文件除外。当我看到这个文件时,我想跳过它并阅读下一个文件

目前我有以下代码:

for file in glob.glob('*.xml'):
    data = open(file).read()
    print(file)

显然,这将读取该文件夹中的所有文件。如何跳过文件“xyz.xml”

假设要删除的元素在
glob.glob()
返回的列表中,请尝试此操作(如果不能保证,请将
remove()
行放入
Try
块中):

或者,如果您关心内存使用,请使用生成器:

for file in (file for file in glob.glob('*.xml') if file != 'xyz.xml'):
    pass

尝试此操作,假设要删除的元素在
glob.glob()
返回的列表中(如果不能保证,请将
remove()
行放在
Try
块中):

或者,如果您关心内存使用,请使用生成器:

for file in (file for file in glob.glob('*.xml') if file != 'xyz.xml'):
    pass

continue
关键字用于跳过for循环的迭代:

for file in glob.glob('*.xml'):
    if file=="xyz.xml":
        continue
    data = open(file).read()
    print(file)

continue
关键字用于跳过for循环的迭代:

for file in glob.glob('*.xml'):
    if file=="xyz.xml":
        continue
    data = open(file).read()
    print(file)

为了完整起见,没有人发布最明显的版本:

for file in glob.glob('*.xml'):
    if file != 'xyz.xml':
        data = open(file).read()
        print(file)

为了完整起见,没有人发布最明显的版本:

for file in glob.glob('*.xml'):
    if file != 'xyz.xml':
        data = open(file).read()
        print(file)

您可以使用glob进行相当简单的模式匹配,但请记住glob的模式规则不是正则表达式! 下面的代码可以帮助您排除所有以“X”开头的xml文件

files = glob.glob('[!X]*.xml')

您可以使用glob进行相当简单的模式匹配,但请记住glob的模式规则不是正则表达式! 下面的代码可以帮助您排除所有以“X”开头的xml文件

files = glob.glob('[!X]*.xml')


有很多简单的方法可以让你度过难关。你应该先自己考虑一下。有很多简单的方法可以让你度过难关。您应该首先自己考虑。使用生成器表达式,这样您就不会创建整个数组。@utdemir甚至可能使用,这样它就不会将整个列表存储到内存中。使用生成器表达式,因此您不会创建整个数组。@utdemir甚至可能会使用,因此它将永远不会将整个列表存储到内存中。这可能是因为如果列表中没有
xyz.xml
,则会引发错误?我不是落选者,我是落选者。分配列表并随后删除元素是非常不必要的(可能glob会返回一个列表,但不应该依赖它)。分配O(n)个内存,遍历列表以搜索“xyz.xml”,它会遍历列表,并调用remove来移动内存中的数据,它也具有线性复杂性。整个过程只需使用常量内存和一次遍历结果列表即可完成。@utdemir阅读
glob.glob()
:“返回可能为空的路径名列表”的文档。列表已分配,该函数返回一个列表。首先删除元素比创建一个新的列表理解或生成器表达式@ÓscarLópez,list.remove可以重新分配整个数组,可能不会,但我们为什么要依赖它,因为我们可以通过生成器/continue语句轻松跳过元素?我认为应该始终着眼于最坏情况的复杂性。可能是因为如果列表中没有
xyz.xml
,这会引发错误?我不是落选者,我是落选者。分配列表并随后删除元素是非常不必要的(可能glob会返回一个列表,但不应该依赖它)。分配O(n)个内存,遍历列表以搜索“xyz.xml”,它会遍历列表,并调用remove来移动内存中的数据,它也具有线性复杂性。整个过程只需使用常量内存和一次遍历结果列表即可完成。@utdemir阅读
glob.glob()
:“返回可能为空的路径名列表”的文档。列表已分配,该函数返回一个列表。首先删除元素比创建一个新的列表理解或生成器表达式@ÓscarLópez,list.remove可以重新分配整个数组,可能不会,但我们为什么要依赖它,因为我们可以通过生成器/continue语句轻松跳过元素?我认为应该始终着眼于最坏情况的复杂性。我也喜欢这个选项,但不幸的是,在python中,它需要对整个块进行额外级别的索引。@AndrewJohnson是的。但我不知道OP是否关心这一点;)想知道这个选项和安德鲁的答案之间的区别。在运行时间或内存分配上有什么优势吗?@ahri根据他的说法,安德鲁的答案在编译后需要额外3个字节(额外的
向前跳转
操作码)。但老实说,这太边缘化了……我也喜欢这个选项,但在python中,不幸的是,它需要对整个块进行额外级别的索引。@AndrewJohnson是的。但我不知道OP是否关心这一点;)想知道这个选项和安德鲁的答案之间的区别。在运行时间或内存分配上有什么优势吗?@ahri根据他的说法,安德鲁的答案在编译后需要额外3个字节(额外的
向前跳转
操作码)。但老实说,这太边缘化了……根据@SylvainLeroux(我回答中的一条评论)的建议,如果需要考虑的话,您可以使用
glob.iglob
来使用迭代器+1根据@SylvainLeroux的建议(我回答中的一条评论),如果需要使用迭代器,可以使用
glob.iglob
+1.