質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Python

    7464questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Windows 10

    891questions

    Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

  • Anaconda

    96questions

subprocessでのエラー(TypeError: a bytes-like object is required, not 'str')

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 270

kohekoh

score 106

タイトルのエラーが発生します

関係があるところのコードをのせます

tokenizer_cmd = ['./tokenizer.perl', '-l', 'en', '-q', '-']


def tokenize(sentences):

    print('Tokenizing..', end=' ')
    text = "\n".join(sentences)
    tokenizer = Popen(tokenizer_cmd, stdin=PIPE, stdout=PIPE, shell=True)
    tok_text = tokenizer.communicate(text)  #もともとはtok_text, _  
    toks = tok_text.split('\n')[:-1]
    print('Done')

    return toks

def build_dict(path):
    sentences = []
    currdir = os.getcwd()
    os.chdir('%s/pos/' %path)
    for ff in glob.glob("*.txt"):
        with open(ff, 'r') as f:
            sentences.append(f.readline().strip())
    os.chdir('%s/neg/' %path)
    for ff in glob.glob("*.txt"):
        with open(ff, 'r') as f:
            sentences.append(f.readline().strip())
    os.chdir(currdir)

    sentences = tokenize(sentences)


def main():
    path = dataset_path
    dictionary = build_dict(os.path.join(path, 'train'))

if __name__ == '__main__':
    main()

エラーは以下の通りです

Traceback (most recent call last):
  File "imdb_preprocess.py", line 134, in <module>
    main()
  File "imdb_preprocess.py", line 112, in main
    dictionary = build_dict(os.path.join(path, 'train'))
  File "imdb_preprocess.py", line 64, in build_dict
    sentences = tokenize(sentences)
  File "imdb_preprocess.py", line 44, in tokenize
    tok_text = tokenizer.communicate(text)  #もともとtok_text, _  
  File "C:\Users\ユーザ名\Anaconda3\envs\py3.5\lib\subprocess.py", line 803, in communicate
    stdout, stderr = self._communicate(input, endtime, timeout)
  File "C:\Users\ユーザ名\Anaconda3\envs\py3.5\lib\subprocess.py", line 1039, in _communicate
'.' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    self._stdin_write(input)
  File "C:\Users\ユーザ名\Anaconda3\envs\py3.5\lib\subprocess.py", line 741, in _stdin_write
    self.stdin.write(input)
TypeError: a bytes-like object is required, not 'str'

読み込みの仕方を変えたりしたのですが、いまいちわかりませんでした
教えていただければ幸いです

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

環境がわかりませんが、プロンプトから

./tokenizer.perl -l en -q -


とタイプすると実行できるんですか?

. というコマンドを /tokenizer.perl -l en -q -というオプションで実行しろ、という解釈になっているように見えますが。


そもそも実行できないコマンドを指定しても、実行できませんね。当たり前ですが。


TypeError: a bytes-like object is required, not 'str'のエラーはこちらですね。

https://docs.python.jp/3.6/library/subprocess.html#subprocess.Popen

If encoding or errors are specified, (略) Otherwise, they are opened as binary streams.

https://docs.python.jp/3.6/library/subprocess.html#subprocess.Popen.communicate

If streams were opened in text mode, input must be a string. Otherwise, it must be bytes.

から、Popenencoding=付きで作るなどしないと、communicateに渡すのはbytes型である必要がありますね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 00:08

    windows上のanacondaでやってます

    実行すると
    '.' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。
    このようになりますね…

    キャンセル

  • 2018/05/25 14:19

    とりあえず強引にbyte型に変えたら
    一応進みました
    ありがとうございました

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7464questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Windows 10

    891questions

    Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

  • Anaconda

    96questions