2013-04-29 2 views
2

파이썬에서 스크립트를 어떻게 바꿀 수 있는지 알고있는 사람이 있는지 궁금 해서요. csv 파일이 들어있는 폴더를 통해 3 그룹으로 나뉩니다. 명령 줄에 파일 이름을 입력하면 스크립트가 작동하지만 많은 파일이 있으므로 영원히 걸릴 수 있습니다. 이제 다음과 같이 보입니다.파이썬 : 여러 csv 파일을 반복합니다.

resultsdir = "blah" 

#filename1=sys.argv[1] 
#filename2=sys.argv[2] 
#filename3=sys.argv[3] 

file1 = open(resultsdir+"/"+filename1+".csv") 
file2 = open(resultsdir+"/"+filename2+".csv") 
file3 = open(resultsdir+"/"+filename3+".csv") 

저는 완전히 초보자입니다. 원하는 것을 설명 할 수 있었으면 좋겠습니다. 어떤 도움에 건배!

+1

당신이 당신의 질문에 정교한 ? 3 개의 파일이 열리는 것을 볼 수 있습니다. csv 파일을 반복하여 열고 싶다면 하나씩 차례로 작성하십시오. 왜 세 번에? – tyteen4a03

+0

나는 모든 csv 파일들로 된 폴더를 가지고 있으며, 단지 3 가지를 취하는 것이 아니라 그 모두에 스크립트를 사용하고 싶다. 나는 csv 파일 자체를 반복하는 것을 의미하지는 않는다. 그리고 나는 한 번뿐만 아니라 세 그룹을 사용하기를 원한다. –

+0

폴더에 csv 파일 만 포함되어 있습니까? 그리고 그 3 개의 파일을 임의로 선택합니까? – Aditya

답변

7

glob 모듈 (http://docs.python.org/3.3/library/glob.html)을 사용하면 디렉토리에 모두 .csv 개의 파일을 가져 와서 열 수 있습니다.

예 :

import glob 
resultsdir = "blah" 

files = sorted(glob.glob(resultsdir+'/*.csv')) 
while len(files) >= 3: 
    file1 = open(files.pop(0)) 
    file2 = open(files.pop(0)) 
    file3 = open(files.pop(0)) 
    # Do something 
# if the number of files can't be divided by 3 do something 
# with the 1 or 2 files which are left 

편집 : 첫 번째 파일이 아닌 마지막에서 마지막에 처음부터 파일을 얻을 수 files.pop(0)files.pop() 변경. 당신이 원하는 모든 목록의 세 가지 요소에 의해 그룹의 경우

+0

나는 이미 디렉토리에 csv 파일 만 들어 있는지 확인 했으므로 처음 세 파일을 함께 사용하는 등의 작업 만 수행하면됩니다. 아마도 매우 간단 할 것입니다 ... 도움을 주셔서 감사합니다! –

+0

파일이 정렬되어 있습니까? 또는 주문이 중요하지 않습니까? – TobiMarg

+0

그들은 정렬되어 처음 3 명이 함께가는 식으로 진행됩니다. –

1

, 여기를 수행하는 코드의 예입니다

import itertools 


def groupby_three(iterable): 
    # x[0] is the index of the scanned element in the input list 
    for _, values in itertools.groupby(enumerate(iterable), 
             lambda x: x[0]/3): 
     yield([y[1] for y in values]) 

# Group by 3 the integers from 10 to 19 
for x in groupby_three(xrange(10, 20)): 
    print x 

출력 :

[10, 11, 12] 
[13, 14, 15] 
[16, 17, 18] 
[19] 
+0

기본적으로 실행 가능한 아이디어처럼 보이지만 csv 파일이 들어있는 폴더로 이동하여 세 그룹으로 가져가는 문제는 해결하지 못합니다. – martineau

관련 문제