Python listdir仅调用CSV文件

Python listdir仅调用CSV文件,python,Python,是否可以使用listdir仅调用csv文件 src_files = os.listdir('M:/Dashboards/Team/Metrics', suffix=".csv") 如果没有,在一行中调用csv文件最有效的方法是什么?我想这就是您要搜索的内容: 使用glob可以过滤文件名 您的代码可能如下所示: for file in glob.glob("*.csv"): print(file) 它不是listdir,但也可以工作。我希望那总比什么都没有好;) 我想这就是你要寻找的:

是否可以使用listdir仅调用csv文件

src_files = os.listdir('M:/Dashboards/Team/Metrics', suffix=".csv")

如果没有,在一行中调用csv文件最有效的方法是什么?

我想这就是您要搜索的内容:

使用glob可以过滤文件名

您的代码可能如下所示:

for file in glob.glob("*.csv"):
    print(file)

它不是listdir,但也可以工作。我希望那总比什么都没有好;)

我想这就是你要寻找的:

使用glob可以过滤文件名

您的代码可能如下所示:

for file in glob.glob("*.csv"):
    print(file)
它不是listdir,但也可以工作。我希望那总比什么都没有好;)


从pathlib导入路径
src_files=Path('M:/Dashboards/Team/Metrics').glob(“*.csv”)
请注意,
Path.glob()
返回一个生成器。如果你只需要 那个目录你可以做一次

导入全局
src_files=glob.glob('M:/Dashboards/Team/Metrics/*.csv')

从pathlib导入路径
src_files=Path('M:/Dashboards/Team/Metrics').glob(“*.csv”)
请注意,
Path.glob()
返回一个生成器。如果你只需要 那个目录你可以做一次

导入全局
src_files=glob.glob('M:/Dashboards/Team/Metrics/*.csv')
你好

因此,首先,
os.listdir()
将实际返回文件和目录

对于仅文件,请使用
os.path
,然后您可以看到文件的扩展名:

from os import listdir
from os.path import isfile, join
files = [f for f in listdir(path) if isfile(join(path, f))]
        if files:
            for each_file in files:
                if each_file.endswith(".csv"):
这里有一些代码示例

Hello

因此,首先,
os.listdir()
将实际返回文件和目录

对于仅文件,请使用
os.path
,然后您可以看到文件的扩展名:

from os import listdir
from os.path import isfile, join
files = [f for f in listdir(path) if isfile(join(path, f))]
        if files:
            for each_file in files:
                if each_file.endswith(".csv"):

对于干净的一行程序,有一些代码示例,我建议您理解以下内容:

the_dir = './'
file_list = [f for f in os.listdir(the_dir) if '.csv' in f]

对于干净的一行程序,我建议列出:

the_dir = './'
file_list = [f for f in os.listdir(the_dir) if '.csv' in f]

有几种方法可以实现这一点:

  • 使用带有通配符的模块glob
  • 使用timeit,性能仅用于我的简单测试

    96.5 µs ± 10.8 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    
  • 使用带有listdir方法和过滤器的操作系统模块:
  • 有表现

    57.8 µs ± 772 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    
    386 µs ± 3.26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
  • 使用模块os和漫游方法:
  • 有表现

    57.8 µs ± 772 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    
    386 µs ± 3.26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    listdir方法似乎是最有效的方法,但请记住,性能取决于目录中的文件数。

    有几种方法可以实现这一点:

  • 使用带有通配符的模块glob
  • 使用timeit,性能仅用于我的简单测试

    96.5 µs ± 10.8 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    
  • 使用带有listdir方法和过滤器的操作系统模块:
  • 有表现

    57.8 µs ± 772 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    
    386 µs ± 3.26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
  • 使用模块os和漫游方法:
  • 有表现

    57.8 µs ± 772 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
    
    386 µs ± 3.26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    listdir方法似乎是最有效的方法,但请记住,性能取决于目录中的文件数。

    谢谢。有什么理由偏好生成器而不是第二种解决方案吗?这是一个非常好的问题:)生成器有保存内存和被惰性评估的好处。想象一下,一个包含数百万个文件的目录,实际上只需要前两个文件。如果没有生成器,您需要在处理它之前在内存中构建整个结果(!),而生成器一次只生成一个结果,但一旦遍历它们就会被消耗掉。再见,谢谢。有什么理由偏好生成器而不是第二种解决方案吗?这是一个非常好的问题:)生成器有保存内存和被惰性评估的好处。想象一下,一个包含数百万个文件的目录,实际上只需要前两个文件。如果没有生成器,您需要在处理它之前在内存中构建整个结果(!),而生成器一次只生成一个结果,但一旦遍历它们就会被消耗掉。看见