有没有办法在 python 中找到 *.csv 存在?

Posted

技术标签:

【中文标题】有没有办法在 python 中找到 *.csv 存在?【英文标题】:Is there a way to find *.csv exists in python? 【发布时间】:2018-10-26 07:32:17 【问题描述】:

需要什么?

测试当前目录中是否生成了任何 *.csv 文件。请注意,csv 文件以日期/时间命名,因此在这种情况下无法获取文件名。

问题

尝试了 os.path.isfile([exact_path_to_file]) 并且它有效。但是,我们需要找到的是,如果生成了任何一个 .csv 文件,则 assertTrue 否则 assertFalse。在 assertTrue 的情况下,将删除文件。 用python可以吗?

参考

最接近的方法是使用像this post 这样的正则表达式,但是对于这个简单的检查,真的需要使用正则表达式吗?

【问题讨论】:

可能重复***.com/questions/2299454/… @RonicK 我不认为它是重复的。该帖子的目的是将多个csv导入数据库...这里我只是想检查一下我们是否可以在本地文件系统中找到是否存在扩展名为.csv的文件。 【参考方案1】:

使用glob module 列出目录中匹配模式的文件:

import glob
import os.path

csv_files = glob.glob(os.path.join(directory_name, '*.csv'))

如果csv_files 是一个非空列表,则有匹配的文件。

在后台,glob 模块将 glob 模式转换为您的正则表达式(通过fnmatch.translate(),在给定目录上运行os.listdir(),并仅返回与模式匹配的名称,作为完整路径:

>>> import os.path, glob, tempfile
>>> with tempfile.TemporaryDirectory() as directory_name:
...     pattern = os.path.join(directory_name, '*.csv')
...     # nothing in the directory, empty glob
...     print('CSV file count:', len(glob.glob(pattern)))
...     # create some files
...     for n in ('foo.csv', 'bar.txt', 'ham.csv', 'spam.png'):
...         __ = open(os.path.join(directory_name, n), 'w')  # touches file, creating it
...     csv_files = glob.glob(pattern)
...     print('CSV file count after creation:', len(csv_files))
...     for filename in csv_files:
...         print(filename)
...
CSV file count: 0
CSV file count after creation: 2
/var/folders/vh/80414gbd6p1cs28cfjtql3l80000gn/T/tmp2vttt0qf/foo.csv
/var/folders/vh/80414gbd6p1cs28cfjtql3l80000gn/T/tmp2vttt0qf/ham.csv

【讨论】:

谢谢。这真的很好。解释也很好。但是,我将不得不为这篇文章选择其他答案,其中不包括导入除系统导入之外的任何更多模块。 @Triguna: glob标准库 中,就像 osos.path 一样。但可以肯定的是,在幕后,实现与其他答案提出的没有太大区别,但该版本仅涵盖“匹配扩展”情况,而我的版本涵盖一般模式匹配情况。例如,当您想要扩展您的模式以包含诸如foobar*.csv 之类的前缀时,如果没有glob.glob(),手动匹配各个部分会变得更加麻烦。 谢谢。是的,这是一个很好的观点。您的答案将保持与大多数人所寻找的答案一样高的投票率,但是对于我提出的问题,上述答案就足够了。 @Triguna:明确一点:您选择最能帮助获得分数的答案是完全正确的。 :-)【参考方案2】:

您可以使用os.listdir 获取所有文件名,使用os.path.splitext 获取文件扩展名

any(os.path.splitext(f)[1] == '.csv' for f in os.listdir(path))

对于当前路径,path=os.getcwd()path='.' 都可以(甚至省略参数)。要删除所有 *.csv 文件,只需执行一个循环

for f in os.listdir('.'):
    if os.path.splitext(f)[1] == '.csv':
        os.remove(f)

【讨论】:

感谢这也有效,不需要导入任何第三方模块。 我还将更改 os.getcwd() 的路径,因为它在问题中被提及为在当前目录中搜索。你能改进答案吗?

以上是关于有没有办法在 python 中找到 *.csv 存在?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将我的 Python OLS 回归保存为 csv?

我们有许多 EBCDIC 格式的大型机文件,Python 中有没有办法将大型机文件解析或转换为 csv 文件或文本文件?

有没有办法从 pandas read_csv 中“提取”dtype 转换功能?

有没有办法将 csv 数据加载到雪花表中并报告每条记录是不是已成功加载? (使用 Python)

有没有办法在不导入 csv 的情况下从 .csv 创建 JSON?

在python中读取csv压缩文件