使用Python查找目录中的所有CSV文件

时间:2012-02-10 20:44:27

标签: file-upload python-2.7

如何在python中找到扩展名为.csv的目录中的所有文件?

13 个答案:

答案 0 :(得分:52)

import os
import glob

path = 'c:\\'
extension = 'csv'
os.chdir(path)
result = glob.glob('*.{}'.format(extension))
print(result)

答案 1 :(得分:29)

from os import listdir

def find_csv_filenames( path_to_dir, suffix=".csv" ):
    filenames = listdir(path_to_dir)
    return [ filename for filename in filenames if filename.endswith( suffix ) ]

函数find_csv_filenames()返回一个文件名列表作为字符串,它们位于具有给定后缀的目录path_to_dir中(默认为“.csv”)。

附录

如何打印文件名:

filenames = find_csv_filenames("my/directory")
for name in filenames:
  print name

答案 2 :(得分:5)

使用Python OS模块在​​目录中查找csv文件。

这里有一个简单的例子:

import os

# This is the path where you want to search
path = r'd:'

# this is the extension you want to detect
extension = '.csv'

for root, dirs_list, files_list in os.walk(path):
    for file_name in files_list:
        if os.path.splitext(file_name)[-1] == extension:
            file_name_path = os.path.join(root, file_name)
            print file_name
            print file_name_path   # This is the full path of the filter file

答案 3 :(得分:4)

我必须获取子目录中的csv个文件,因此,使用tchlpr的响应我修改它以最适合我的用例:

import os
import glob

os.chdir( '/path/to/main/dir' )
result = glob.glob( '*/**.csv' )
print( result )

答案 4 :(得分:3)

通过结合使用过滤器和lambda,您可以轻松过滤出给定文件夹中的csv文件。

import os

files = os.listdir("/path-to-dir")    
files = list(filter(lambda f: f.endswith('.csv'), files))

# lambda returns True if filename name ends with .csv or else False
# and filter function uses the returned boolean value to filter .csv files from list files.

答案 5 :(得分:2)

您可以仅将glob.glob与递归= true一起使用,模式**将匹配任何文件以及零个或多个目录,子目录以及指向目录的符号链接。

import glob, os

os.chdir("C:\\Users\\username\\Desktop\\MAIN_DIRECTORY")

for file in glob.glob("*/.csv", recursive = true):
    print(file)

答案 6 :(得分:1)

import os

path = 'C:/Users/Shashank/Desktop/'
os.chdir(path)

for p,n,f in os.walk(os.getcwd()):
    for a in f:
        a = str(a)
        if a.endswith('.csv'):
            print(a)
            print(p)

这将有助于识别这些csv文件的路径

答案 7 :(得分:1)

此解决方案使用python函数过滤器。此函数创建一个元素列表,该函数为其返回true。在这种情况下,使用的匿名函数是对通过os.listdir('我要查看的路径')

获得的目录文件列表的每个元素进行部分匹配'.csv'。

import os

filepath= 'filepath_to_my_CSVs'  # for example: './my_data/'

list(filter(lambda x: '.csv' in x, os.listdir('filepath_to_my_CSVs')))

答案 8 :(得分:0)

尽管thclpr提供的解决方案有效,但它仅扫描目录中的即时文件,而不扫描子目录中的文件(如果有)。虽然这不是必需条件,但以防万一有人也希望扫描子目录的情况是使用os.walk

的代码
import os
from glob import glob
PATH = "/home/someuser/projects/someproject"
EXT = "*.csv"
all_csv_files = [file
                 for path, subdir, files in os.walk(PATH)
                 for file in glob(os.path.join(path, EXT))]
print(all_csv_files)

this博客复制。

答案 9 :(得分:0)

请使用经过测试的工作代码。此函数将返回所有CSV文件的列表,并在您指定的路径中包含绝对CSV文件路径。

import os
from glob import glob

def get_csv_files(dir_path, ext):
    os.chdir(dir_path)
    return list(map(lambda x: os.path.join(dir_path, x), glob(f'*.{ext}')))

print(get_csv_files("E:\\input\\dir\\path", "csv"))

答案 10 :(得分:0)

使用python glob模块轻松列出我们所需的文件。

import glob
path_csv=glob.glob("../data/subfolrder/*.csv")

答案 11 :(得分:0)

许多(链接的)答案使用 os.chdir() 更改工作目录。但你不必这样做。

递归打印 /home/project/ 目录中的所有 CSV 文件:

pathname = "/home/project/**/*.csv"

for file in glob.iglob(pathname, recursive=True):
    print(file)

需要 python 3.5+。来自文档 [1]:

  • pathname 可以是绝对的(如 /usr/src/Python-1.5/Makefile)或相对的(like ../../Tools/*/*.gif
  • pathname 可以包含 shell 样式的通配符。
  • 结果是否排序取决于文件系统。
  • 如果 recursive 为真,则模式 ** 将匹配任何文件以及零个或多个目录、子目录和指向目录的符号链接

[1] https://docs.python.org/3/library/glob.html#glob.glob

答案 12 :(得分:0)

您可以将 globrecursive = True 一起使用,模式 ** 将匹配任何文件以及零个或多个目录、子目录和指向目录的符号链接。

import glob, os

os.chdir("C:\\Users\\username\\Desktop\\MAIN_DIRECTORY")

for file in glob.glob("*/*.csv", recursive = True):
    print(file)