我正在使用
处理特定目录中的每个文件 func loadData (dataPath : String, parameters:Dictionary <String,String>, importHandler: ((data:JSON) -> Void)?) {
let urlPath = baseURL + dataPath
let start = NSDate()
Alamofire.request(.GET, urlPath, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseJSON() {
(req,res, data, error) in
if error != nil {
....
用于最终输出的代码(在处理目录中的所有文件之后):
files=list.files(path_of_directory, recursive=T, pattern='.xlsx')
for(i in 1:length(files))
{
#Some processing takes places which takes all files in a particular directory
and produces single file
}
每次我更改目录的路径以处理它包含的文件时,我还会根据处理的目录更改单个输出文件的名称。假设目录是D1,D2和D3,每个目录包含文件F1和F2。有没有什么方法可以进一步自动化这个过程。该程序执行以下步骤: 1.我移动到特定目录 2.处理该目录中的所有文件,最终的sinle文件与目录名称相同。 3.移动到下一个目录 4.处理下一个目录中的所有文件,最后一个文件的名称与目录相同。 5.此过程一直持续到所有目录和包含的文件都被处理完毕。 6.因此,如果有五个目录,则会生成5个excel文件。现在假设D1目录是进程,我应该将输出作为D1处理。如果能够帮助编写相同的代码,那将是非常有帮助的。
答案 0 :(得分:2)
您可以继续使用相同的逻辑。例如,将处理包装在为每个目录调用它的函数中。
lapply(list("path_d1","path_d2"), ## add list of directory here
function(path_of_directory){
files=list.files(path_of_directory,
recursive=TRUE, pattern='.xlsx')
lapply(files ,function(file){ ## better to use lapply here than for loop
## Some processing takes places
## which takes all files in a particular directory
## and produces single file
})
})
答案 1 :(得分:2)
您可以将循环嵌套在2个级别中,这样第1级循环通过目录,第2级循环通过每个目录中的文件。考虑一下:
#List all dirs you need to process
dlist <- list.dirs("parent_dir") #parent dir==main dir with all the dirs
#Loop over dirs
for(d in dir_list){
#List files in d'th dir that need to be processed
flist <- list.files(d, pattern='.xlsx')
#Loop over files
for(f in flist){
#Some processing takes places here
}
#Write output
write.xlsx(datasetr_df, file=paste0(d,".xlsx"),
sheetName="Sheet1",col.names=T, row.names=F)
#Report progress
print(paste0("Finished processing directory ", d))
}