2016-07-04 12 views
-3
import os 
import codecs 
import argparse 
os.chdir('C:\\Users\\Kingsaber\\Desktop\\python_excercises') 
a = codecs.open('BeforeKichiku.txt', encoding='utf-8') 
p = a.read() 
print(p) 

import re 

#ch = u"I am from 美国。We should be friends. 朋友." 

b = re.findall(u"[\u4e00-\u9fff]+", a) 
for x in b: 
    print(x) 

期待される結果オブジェクト予想されます。正規表現検索は、文字列やバイトなどが

何が起こるか:文書は正常に印刷されますが、正規表現の検索には以下のエラーが表示されます。正規表現をスイッチして "ch"という文字列を検索すると、すべてが正しく動作します。なんらかの理由で、Unicode文書では動作しません。

エラー:

Traceback (most recent call last): 
    File "C:/Users/Kingsaber/Desktop/destruga3.py", line 15, in <module> 
    b = re.findall(u"[\u4e00-\u9fff]+", a) 
    File "C:\Users\Kingsaber\AppData\Local\Programs\Python\Python35-32\lib\re.py", line 213, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: expected string or bytes-like object 
+0

はい、 'print()'ではなく 'print'を使用しています。そして、Python 3には 'ur'というプリフィックスはなく、どこにでも' u'プレフィックスを置いてください。しかし、あなたは*具体的*であり、あなたの実際の完全なエラーメッセージを含める必要があります。 –

+0

ああ、私はprint()を修正するのを忘れていました。より詳細なエラーメッセージを表示するにはどうすればよいですか?実行する前に無効な構文が書かれているだけです。 –

+0

これをPythonインタプリタで実行すると、特定の行番号とトークナイザの位置を指す '^'キャレットが与えられます。 'ur 'はPython 3の認識された接頭辞ではないので、おそらく' ur' ... '文字列の終わりを指しています。単に 'u'を削除してください。 –

答えて

0

あなたはファイルオブジェクトに渡している。

a = codecs.open('BeforeKichiku.txt', encoding='utf-8') 

# ... 

b = re.findall(u"[\u4e00-\u9fff]+", a) 

acodecs.open()結果であり、そしてあなたがre.findall()aを渡す方法。ファイルpに置きます。 1文字の変数ではなく、より意味のある変数名を使用して、そのようなエラーをより簡単に見つけることができます。

実際にはcodecs.open()を使用しないでください。

:それは、ちょうどビルトイン open() callio.open()の別名がある)を使用する多くの問題を持っているとPython 3で導入されたとPython 3ではPythonの2にバックポート io frameworkによって廃止されたのPython 2の古いAPIです
with open('BeforeKichiku.txt', encoding='utf-8') as fileobj: 
    contents = fileobj.read() 
matches = re.findall("[\u4e00-\u9fff]+", contents) 
for match in matches: 
    print(match) 
関連する問題