2017-07-22 13 views
-1

TARファイルにアクセスして処理するGitHubのスクリプトを修正しようとしています。コードには、ファイルが格納されているルートディレクトリを指し示す必要がある変数があります(私はそう思います...)。Pythonの変数にディレクトリを渡す

def make_Dictionary(root_dir): 
    emails_dirs = [os.path.join(root_dir,f) for f in os.listdir(root_dir)]  
    all_words = []  
    for emails_dir in emails_dirs: 
     emails = [os.path.join(emails_dir,f) for f in os.listdir(emails_dir)] 
     for mail in emails: 
      with open(mail) as m: 
       for line in m: 
        words = line.split() 
        all_words += words 
    dictionary = Counter(all_words) 
    list_to_remove = dictionary.keys() 

    for item in list_to_remove: 
     if item.isalpha() == False: 
      del dictionary[item] 
     elif len(item) == 1: 
      del dictionary[item] 
    dictionary = dictionary.most_common(4000) 

    np.save('dict_movie.npy',dictionary) 

    return dictionary 

root_dir = sys.path[0] 
dictionary = make_Dictionary(root_dir) 

ROOT_DIRが投げている:

File "C:\Users\seand\eclipse-workspace\sentiment_project\src\root\nested\movie-polarity.py", line 22, in make_Dictionary 
    emails = [os.path.join(emails_dir,f) for f in os.listdir(emails_dir)] 
NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\Users\\seand\\eclipse-workspace\\sentiment_project\\src\\root\\nested\\movie-polarity-tfidf.py' 

方向状態「注:コーパスのディレクトリパスをmovie-polarity-tfidf.pyとmovie-polarity.pyニーズにするには、以下のコードがありますそれに応じて設定します。私が指定しているパスには、スクリプトが必要とするコーパスのTARファイルが含まれています。私はなぜ、スクリプトがディレクトリを探している場合、この.pyファイルが取得されているのか分からない。

+0

「sys.path [0]」に保持されている値は何ですか?通常、 'sys.path [0]'はユーザの現在のディレクトリになります。 –

+1

@StephenRauch確かにそうです。一定! – Sean

+0

@KindStranger root_dir変数を表示すると、C:\ Users \ seand \ eclipse-workspace \ sentiment_project \ src \ root \ nestedですが、mark_Dictionary関数に渡されると、最後にファイルを取得しているようです私のディレクトリは無効です。 – Sean

答えて

0

os.listdirは、ディレクトリ内のすべてをリストします。これには、ファイルとディレクトリの両方が含まれます。私はあなたが最初のディレクトリ(email_dirsのリストを生成する)と2回目のファイル(emailsのリストを生成する)だけを望むと仮定します。

def make_Dictionary(root_dir): 
    # # # Check for only directories # # # 
    emails_dirs = [os.path.join(root_dir,f) for f in os.listdir(root_dir) if os.path.isdir(f)]  
    all_words = []  
    for emails_dir in emails_dirs: 
     # # # Check for only files # # # 
     emails = [os.path.join(emails_dir,f) for f in os.listdir(emails_dir) if os.path.isfile(f)] 
     for mail in emails: 
      with open(mail) as m: 
       for line in m: 
        words = line.split() 
        all_words += words 
    dictionary = Counter(all_words) 
    list_to_remove = dictionary.keys() 

    for item in list_to_remove: 
     if item.isalpha() == False: 
      del dictionary[item] 
     elif len(item) == 1: 
      del dictionary[item] 
    dictionary = dictionary.most_common(4000) 

    np.save('dict_movie.npy',dictionary) 

    return dictionary 

root_dir = sys.path[0] 
dictionary = make_Dictionary(root_dir) 
+0

ありがとうございます@Kind見知らぬ人とあなたの助けを求める他の人。あなたの提案はそのエラーを解決しましたが、今度はlist_to_removeループのfor項目がエラーを投げています。私は皆さんにこのスクリプト全体をデバッグするように頼むつもりはありません。これは私のコードではありません。それはhttps://github.com/abhijeet3922/Sentiment-Analysis-using-tf-idf---Polarity-dataset – Sean

+0

@Sean、noproblemからです! **デバッグ行**をどこにでも追加するだけで、何が起こっているのかを正確に確認できます。 –

0

emails_dirsの理解では、いくつかのディレクトリ以外が返されています。そうで固定することができます:あなたは、関数の最初の行にos.path.join(rootdir,f)を使用している

emails_dirs = [os.path.join(root_dir,f) for f in os.listdir(root_dir) 
       if os.path.isdir(os.path.join(root_dir,f))] 
0

、そうemail_dirs絶対パスのリストではなく、ディレクトリ。あなたは例外を持っています。

関連する問題