2014-12-19 2 views
0

열 파일 이름 목록이 있습니다. 한 번에 하나의 파일을 열고 일부 작업을 수행 한 다음 다른 파일에 결과를 기록해야합니다. 어떻게 파이썬에서 R.에서이 작업을 수행 할 수 있습니다 어떻게 매우 비슷한가요 R.에서 동일한 달성 할 수루프로 목록에 저장된 파일 이름 열기

item = ['f1','f2','f3'] 
for stuff in item: 
    f = open(stuff).read() 
    #do some ops 
    k = open('new/'+stuff,'w') 
    k.write(f) 
    k.close() 

와 같은 행동을 할 것인가?

는 여기에 내가 기본적으로 list.files와 파일 이름을로드

fileList <- list.files("temp", pattern="*.csv", full.names=TRUE) 
filer<-function(filName){ 
csv4.data <- read.csv(paste('/home/amrith/ferosaRanks/combine/',filName,sep=""),header=FALSE) 
mat = as.matrix(csv4.data) 
(CESnoweights <- RankAggreg(mat, 14, method="CE", distance="Spearman", convIn=7, rho=.1)) 
write.csv(CESnoweights['top.list'],file=paste("/home/amrith/ferosaRanks/unW/",filName,sep="")) 
} 
lapply(fileList,filer) 

을 한 일입니다. 함수를 함수로 정의 lapply를 사용하여 각 항목에 연산 적용

+1

네, 매우 비슷한 것입니다. "?", "? readLines','? writeLines'가 도움이 될 수 있습니다. '? connection'과'? close'를 사용하면 멋진 인코딩을 할 수 있습니다. – zero323

답변

1

파일이 csv 형식 인 경우 다음은 간단한 해결책입니다.

for (i in 1:length(item)){ 
    d <- read.csv(item[i]) 
    # do something to d 
    new_file <- paste0(item[i], "_new") 
    write.csv(d,file = new_file) 
} 
1

paste()를 사용할 수 있습니다. 예를 들어 특정 디렉토리의 모든 파일에 작업을 수행하려고한다고 가정 해 봅시다. 먼저 list.files()를 사용하여 목록을 가져올 수 있습니다.

filelist = list.files("C:/Users/XXX/Desktop/r") 

그럼 난 파일을로드 할 수 read.csv과 함께 붙여 넣기를 사용할 수 있습니다 (당신은 물론 CSV의의를 가정,하지만 당신은 일반적으로이 방법을 사용할 수 있습니다.

df = read.csv(paste("C:/Users/XXX/Desktop/r/",filelist[1], sep = "")) 

당신의 dataframes의 모든 경우 당신은 단지 물건을 할 열 번호를 사용할 수와 동일합니다.

df$newColumn = df[,1]+df[,2] 

당신이이 루프에서 수행 할 수있는 방법을 볼 수 있습니다. 당신은 또한 당신이 그것에 물건을 할 수있는 방법을 볼 수 있어야합니다. 동적 들어 파일 이름, 너 여전히이 방법을 사용할 수 있습니다. 예를 들어, 원본 파일이 "XXX.csv"이고 처리 된 파일을 "XXX processed.csv"라고 말합니다. 그런 다음 데이터를 조작 한 후, 당신은

write.csv(df, paste("C:/Users/XXX/Desktop/r/",filelist[1], " processed.csv", sep = ""), row.names = FALSE) 

그것은 데이터의 모양을 정확히 모르고 구체적 어렵다과 같은 작업을 수행 할 수 있습니다,하지만 난 당신이 아이디어를 얻을 생각합니다.

관련 문제