2013-07-24 2 views
0

현재 .csv 파일의 데이터를 그래프로 만드는 코드를 만들었습니다. 그러나 해당 코드가 csv 파일이있는 폴더에있는 경우에만 코드를 실행할 수 있습니다. 스크립트 파일을 .csv 파일과 동일한 디렉토리에 있지 않아도되게하려면 어떻게해야합니까? 또한 같은 스크립트가 다른 디렉토리의 모든 CSV 파일을 읽으 려합니다.모든 디렉토리에서 실행할 수있는 스크립트

왜 아래 코드가 잘못 되었습니까?

Here=os.path.dirname(os.path.abspath(__file__)) 
directory = "path of directory" 
listing = os.listdir(directory) 
for files in listing: 
    if files.endswith('.csv'): 
    full_name = os.path.join(Here,files) 
    df=pd.read_csv(full_name) 
+0

그래서 (당신의 목록을 할 '여기'를 사용하는 것입니다 생각 당신은 그것을 지정할 필요가 없습니다). 디렉토리 이름으로 빈 문자열은 거의 확실하게 현재 디렉토리로 설정됩니다 (유일한 합리적인 대안은 오류 일 것입니다). 'directory'에 대해 다른 값을 지정했다면,'directory'로 그 이름을 결합해야합니다. –

답변

1

그냥 directory="/path/to/fldr/with/csv"

full_name = os.path.join(directory,files)을 설정

+0

내가 그 일을 할 때 어떤 이유로 그런 파일이나 디렉토리가 없다는 오류 메시지가 나타납니다. 왜 그런지 알아? 나는 올바른 경로와 모든 것을 가지고있다. – user2614937

+1

@ user2614937 계속 진행해서 그런 파일이나 디렉토리가 없다고 말하면 경로에 문제가 있다고 말한다. 확실히 인쇄하십시오. –

+0

이 작품! 감사! – user2614937

0

예, 그것은 잘못이다;

:

import argparse 

def import_function(sourcedir): 
    for filename in os.listdir(sourcedir): 
     csvfilename = os.path.join(sourcedir, filename) 
     with open(csvfilename) as csvfile: 
      reader = csv.reader(csvfile) 
      for row in reader: 
       # etc.  

if __name__ == '__main__': 
    parser = argparse.ArgumentParser('CSV importer') 
    parser.add_argument('sourcedir', default='.') 
    options = parser.parse_args() 
    import_function(options.sourcedir) 

이제 스크립트에 파일 목록을 하나의 명령 줄 인수, 디렉토리 경로를 받아 : 당신은 어디 CSV 파일을 찾을 수있는 스크립트를 알려주는 인수를 허용해야합니다

python yourscript.py /path/to/directory 

기본값은 현재 디렉토리를 여전히 살펴 보는 것입니다.

0

빈 디렉터리 (directory = '')를 나열하고 있습니다.

현재 디렉토리를 얻으려면 os.getcwd()이 필요합니다.

작동시킬 디렉토리를 지정하는 데있어서 문제점이 발생하지 않습니다. 명령 행 매개 변수를 사용하여 수행 할 수 있습니다 (sys.argv 참조).

+0

'os.getcwd()'를 사용하지 않고 현재 디렉토리에''. ''을 사용할 수 있습니까? –

+0

@JonathanLeffler 확실! 그러나 listdir은 디렉토리 내용을 반환하는 반면 디렉토리 경로 자체는 getcwd를 반환합니다. 그는 절대 경로를 작성하는 데 사용하기 때문에 나는 그에게도 그 호출을 알려주는 것이 유용 할 것이라고 생각했다. :) –

0

원하는 경로를 '여기'에 지정하고 빈 문자열 변수 '디렉토리'를 만들고 그 경로를 사용하여 목록을 제공합니다. 목록에는 디렉토리 ("")의 파일 만 검색하기 때문에 기본 폴더 (코드가있는 곳)에있는 파일 만 포함됩니다. 나는 당신이하고자하는 것은 현재 디렉토리에있는 파일을 나열하고 있기 때문에, 당신은 전혀 Here``로 이름을 가입 할 필요가 없습니다

directory = Here 
+0

그 결과 스크립트는 CSV 파일과 같은 디렉토리에있게된다. 그렇지 않습니까? –

관련 문제