【问题标题】:listing csv files using python re.match使用 python re.match 列出 csv 文件
【发布时间】:2017-12-07 06:03:28
【问题描述】:

我在 python 中创建了一个小代码来列出当前目录中的 csv 文件:

>>> for i in range(len(os.listdir())):
...     isMatch = re.search(r'\.csv$', os.listdir()[i])
...     if (isMatch):
...             print(os.listdir()[i])
...
HR_data.csv
HR_data2.csv
HR_data_WEKA.csv
WholesaleCustomersData.csv
>>>

有没有更优雅和更短的方法来做到这一点,比如使用 lambda 表达式??? 非常感谢。/

【问题讨论】:

    标签: python regex csv


    【解决方案1】:

    您不需要正则表达式,glob 有开销。只需使用内置的str.endswith 函数:

    for filename in os.listdir():
        if filename.endswith('.csv'):
            print(filename)
    

    此外,直接迭代列表中的元素比迭代索引然后引用列表更有效。尤其是考虑到,每次想访问ith文件的时候,都不停地调用os.listdir(),非常浪费。


    这是filter 的优雅替代方案:

    for csv_files in filter(lambda x: x.endswith('.csv'), os.listdir()):
        print(csv_files)
    

    适用于 python2.x 和 3.x。

    【讨论】:

    • @user42481 如果有帮助,请查看this,并考虑将其标记为已接受。谢谢!
    【解决方案2】:

    您可以尝试使用 Python 的 glob 模块,而不是使用正则表达式:

    import glob
    
    files = glob.glob('*.csv')
    for f in files:
        print(f)
    

    【讨论】:

      【解决方案3】:
      from glob import glob
      
      for f in glob('*.csv'):
          print(f)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-30
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        • 2015-11-28
        • 2020-08-30
        相关资源
        最近更新 更多