【发布时间】:2012-03-03 07:44:24
【问题描述】:
如何在 python 中找到扩展名为 .csv 的目录中的所有文件?
【问题讨论】:
标签: python csv file directory find
如何在 python 中找到扩展名为 .csv 的目录中的所有文件?
【问题讨论】:
标签: python csv file directory find
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/…
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
【讨论】:
通过使用过滤器和 lambda 的组合,您可以轻松过滤掉给定文件夹中的 csv 文件。
import os
all_files = os.listdir("/path-to-dir")
csv_files = list(filter(lambda f: f.endswith('.csv'), all_files))
# lambda returns True if filename (within `all_files`) ends with .csv or else False
# and filter function uses the returned boolean value to filter .csv files from list files.
【讨论】:
使用 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 文件的路径
【讨论】:
您可以将glob 与recursive = true 一起使用,** 模式将匹配任何文件以及零个或多个目录、子目录和目录的符号链接。
import glob, os
os.chdir("C:\\Users\\username\\Desktop\\MAIN_DIRECTORY")
for file in glob.glob("*/.csv", recursive = true):
print(file)
【讨论】:
虽然 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 博客。
【讨论】:
此解决方案使用 python 函数过滤器。此函数创建一个函数返回 true 的元素列表。在这种情况下,使用的匿名函数是在使用 os.listdir('the path i want to look in') 获得的目录文件列表的每个元素上部分匹配“.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')))
【讨论】:
使用python glob模块轻松列出我们需要的文件。
import glob
path_csv=glob.glob("../data/subfolrder/*.csv")
【讨论】:
许多(链接的)答案使用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 为真,则模式 ** 将匹配任何文件以及零个或多个目录、子目录和目录的符号链接【讨论】:
您可以将glob 与recursive = True 一起使用,** 模式将匹配任何文件以及零个或多个目录、子目录和目录的符号链接。
import glob, os
os.chdir("C:\\Users\\username\\Desktop\\MAIN_DIRECTORY")
for file in glob.glob("*/*.csv", recursive = True):
print(file)
【讨论】:
请使用这个经过测试的工作代码。此函数将返回您指定路径中具有绝对 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"))
【讨论】: