Извлеките имя папки и имя файла из FilePath, используя scala

У меня есть потоки файлов, которые читаются из каталога, и файловое дерево имеет вид:

/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

2 ответа

Решение

В дополнение к тому, что предложил @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

который возвращает вам два списка, один с датами и один с именами файлов.

Вы можете попробовать это решение, но я бы посоветовал поиграть с регулярными выражениями, чтобы извлечь имя папки. Это добавит функциональность проверки в ваш код.

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 )
Другие вопросы по тегам