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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

540閲覧

教科書の手順でのテキストファイルが開けません

James1201

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/04/25 17:10

編集2018/04/26 09:43

教科書の中のテキストを読み込むコードなのですが、テキストファイルを教科書内のものではない別のものにすると読み込めなくなりました。
やはりテキストデータの違いによるものなのでしょうか・・・、

python

1from janome.tokenizer import Tokenizer 2import os, glob 3 4# Janomeを使って形態素解析を行う 5ja_tokenizer = Tokenizer() 6 7#日本語を分かち書き 8def ja_tokenize(text): 9 res = [] 10 lines = text.split("\n") 11 #lines = lines[2:] # 最初の2行はヘッダー情報なので捨てる 12 for line in lines: 13 malist = ja_tokenizer.tokenize(line) 14 for tok in malist: 15 ps = tok.part_of_speech.split(",")[0] 16 if not ps in['名詞', '動詞', '形容詞']: continue 17 w = tok.base_form 18 if w == "*" or w == "": w = tok.surface 19 if w == "" or w == "\n": continue 20 res.append(w) 21 res.append("\n") 22 return res 23 24# テストデータを読み込み 25root_dir = './Isojintext' 26for path in tqdm(glob.glob(root_dir+"**/*.txt", recursive=True)): 27 if path.find("LICENSE") > 0: continue 28 print(path) 29 path_wakati = path + ".wakati" 30 if os.path.exists(path_wakati): continue 31 text = open(path,"r").read() 32 words = ja_tokenize(text) 33 wt = " ".join(words) 34 open(path_wakati, "w", encoding="utf-8").write(wt)

混み込めていたテキスト一例
./newstext
イメージ説明
読み込めなかったテキスト一例
./Isojintext
イメージ説明

エラー内容

python

1 0%| | 0/23 [00:00<?, ?it/s] 2./Isojintext/eq_0312.txt 3 4--------------------------------------------------------------------------- 5OSError Traceback (most recent call last) 6<ipython-input- 788-171f9eae8e3f> in <module>() 8 6 path_wakati = path + ".wakati" 9 7 if os.path.exists(path_wakati): continue 10----> 8 text = open(path,"r").read() 11 9 words = ja_tokenize(text) 12 10 wt = " ".join(words) 13 14OSError: [Errno 22] Invalid argument

エラー内容2

python

10%| | 0/23 [00:00<?, ?it/s] 2./isojintext/eq_0312.txt 3 4--------------------------------------------------------------------------- 5OSError Traceback (most recent call last) 6<ipython-input-25-15e4194c1e08> in <module>() 7 7 if os.path.exists(path_wakati): continue 8 8 f = open(path, "r") 9----> 9 text = f.read() 10 10 words = ja_tokenize(text) 11 11 wt = " ".join(words) 12 13OSError: [Errno 22] Invalid argument

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

tqdm(glob.glob(root_dir+"**/*.txt", recursive=True))をpathに設定していることが原因ではないでしょうか。pathに設定するべきなのは```glob.glob(root_dir+"**/*.txt", recursive=True)

とりあえず、tqdm()を外して```for i in glob.glob(root_dir+"**/*.txt", recursive=True)``` としてみてはいかがでしょうか。

投稿2018/04/25 18:28

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

James1201

2018/04/26 09:38

ありがとうございます。 ご指摘いただいた通りやってみましたが、エラー内容は変わりませんでした・・・。
guest

0

ベストアンサー

----> 8 text = open(path,"r").read()

OSError: [Errno 22] Invalid argument
なので、問題があるのは恐らくpathです。

とりあえず、macは大文字小文字区別しないので、そこで問題になり得るか・・・? './Isojintext'を'./isojintext'にして、ディレクトリ名の方も変更して走らせてみてください。
駄目だったら、

f = open(path,"r") text = f.read()

二行に分けてどっちが駄目なのか特定しましょう。

投稿2018/04/25 17:50

編集2018/04/25 17:54
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

James1201

2018/04/26 09:44

ありがとうございます。 ご指摘の通り修正したところ、エラー内容が上記「エラー内容2」のようになりました。 これは、そもそもファイルが読み込めていないということでしょうか・・・
hayataka2049

2018/04/26 14:59

パスは大丈夫だけど、読もうとすると駄目ですか・・・ ちなみに、どれくらいのファイル容量ですか?
James1201

2018/04/27 01:23

2.93GBです・・・!
hayataka2049

2018/04/27 01:42

え、ということは2.93GB級のがisojintext以下にたくさんあるという理解で良いですか? それとも複数あるファイルの合計が2.93GB?
James1201

2018/05/01 11:39

親身に考えて下さって有難うございました・・・! はい、3,4GBクラスのテキストファイルが30個くらいあるという状況です。 訳あって今回のコードは一旦使わないことになったので、BAにして締めさせていただきます・・・!
James1201

2018/05/01 11:39

回答が遅れて申し訳ありません!
hayataka2049

2018/05/01 11:40

あっ、そうですか 一応100文字ずつ読むとか、一行ずつ読むとかで処理できる可能性はあるので、今後必要になったら参考にしてください
James1201

2018/05/01 11:41

有難うございます!m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問