Извлеките имя папки и имя файла из 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 )