【问题标题】:Extract folder name and filename from FilePath using scala使用 scala 从 FilePath 中提取文件夹名称和文件名
【发布时间】:2016-04-07 12:48:00
【问题描述】:

我从目录中读取文件流,文件树的格式为:

/repository/resources/2016-03-04/file.csv
/repository/resources/2016-03-04/file2.csv
/repository/resources/2016-03-05/file3.csv
/repository/resources/2016-03-05/file4.csv

请,我需要帮助使用 scala 来提取日期文件夹的名称和表单中的 .csv 文件:

2016-03-03 file.csv
2016-03-04 file2.csv
2016-03-05 file3.csv
2016-03-05 file4.csv

【问题讨论】:

    标签: scala feature-extraction text-extraction


    【解决方案1】:

    作为@PavelOliynyk 建议的补充,您可以执行以下操作:

    val list = List(
      "/repository/resources/2016-03-04/file.csv",
      "/repository/resources/2016-03-04/file2.csv",
      "/repository/resources/2016-03-05/file3.csv",
      "/repository/resources/2016-03-05/file4.csv")
    
    val datesAndFiles = list.map(_.split("/").takeRight(2).toList)
    

    这是假设每个字符串中的最后两项是日期和文件名。我将其转换为列表,以便您可以在需要进一步处理时轻松进行模式匹配,例如这就是你如何为每一行获取一个元组:

    val datesAndFileTuples = datesAndFiles.map({
      case date :: file :: Nil => (date, file)
    })
    

    这为您提供了每个日期文件对的元组。如果您希望将它们分成日期和文件(每个都在自己的列表中),您可以这样做:

    val (dates :: files :: Nil) = datesAndFiles.transpose
    

    它会返回两个列表,一个带有日期,一个带有文件名。

    【讨论】:

      【解决方案2】:

      您可以尝试此解决方案,但我建议您使用正则表达式来提取文件夹名称。这将为您的代码添加验证功能。

      val fileName : String = "/repository/resources/2016-03-05/file4.csv"
      val result = fileName.split("/")
      println( result(3) )
      

      而正则表达式解决方案将如下所示:

      val fileName : String = "/repository/resources/2016-03-05/file5.csv"
      
      val Pattern = "/([a-z]+)/([a-z]+)/([-0-9]+)/([a-z0-9.]+)".r
      val Pattern(partA, partB, partC, partD) = fileName
      println( partA )
      println( partB )
      println( partC )
      println( partD )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-18
        • 1970-01-01
        • 2018-07-03
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        相关资源
        最近更新 更多