代码之家  ›  专栏  ›  技术社区  ›  Triguna

有没有办法找到*。python中是否存在csv?

  •  2
  • Triguna  · 技术社区  · 7 年前

    需要什么?

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

    问题

    尝试了操作系统。路径isfile([精确的\u路径\u到\u文件])并且它可以工作。然而,我们需要找到的是,如果其中任何一个。如果生成csv文件,则为assertTrue,否则为assertFalse。如果是assertTrue,将删除该文件。 python可以做到这一点吗?

    参考

    其中最接近的是使用正则表达式,如 this 然而,对于这个简单的检查,真的需要正则表达式吗?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Martijn Pieters    7 年前

    使用 glob module 要列出目录中与模式匹配的文件,请执行以下操作:

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

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

    在引擎盖下 全球 模块将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
    
        2
  •  1
  •   jf328    7 年前

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