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

看起来像stackoverflow.com/questions/3964681/的副本

可能重复查找Python中扩展名为.txt的目录中的所有文件

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

这是一个简短的解决方案,但请注意,这只会在当前目录(脚本运行的位置)中进行扫描。 要更改使用os.chdir("/mydir"),如下所示:stackoverflow.com/questions/3964681/

@ppasler嗨,用你的消化编辑的答案。 另外我觉得现在它更加pythonic :)

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

我正在使用此代码进行操作时遇到问题我试图使用csv = csv.reader(open(filenames,'rb'))显示目录中的所有内容,并且它给我一个错误"强制转换为unicode :需要字符串或缓冲区"你可以帮助我在这里请非常感谢,如果你能帮我解决它。

使用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

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

import os
import glob
os.chdir( '/path/to/main/dir' )
result = glob.glob( '*/**.csv' )
print( result )
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文件的路径

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

使用编辑将信息添加到您的答案中,而不是添加评论。 还可以使用Ctrl + K格式化代码

此解决方案使用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')))

请解释此代码如何解决OP的问题。

虽然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)

从这个博客复制。