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

时间:2018-05-16 09:49:09

标签: python regex file csv exists

需要什么?

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

问题

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

参考

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您可以使用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)