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

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

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

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

Q&A

解決済

4回答

4769閲覧

python一行ずつファイルを読み込みたい

abokadoishii

総合スコア12

Python

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

0グッド

0クリップ

投稿2019/07/29 09:26

編集2019/07/29 13:34

やりたいこと

pythonでファイルを一行ずつ読み込み処理をしたいです。そこでreadlinesを使おうと思うのですがAttributeError: 'list' object has no attribute 'strip'というエラーが出てしまいます。
read()の時は読み込めます。

ソースコード

python

1import json 2import codecs 3from janome.tokenizer import Tokenizer 4 5t=Tokenizer() 6page = codecs.open('page.jl','r','utf-8') 7text = page.readlines() 8result = open('result.txt','w') 9tokens = t.tokenize(text) 10for token in tokens: 11 print(token) 12 result.write(str(token)) 13 result.write('\n') 14page.close()

エラーメッセージ

>python word.py Traceback (most recent call last): File "word.py", line 10, in <module> tokens = t.tokenize(text) File "C:\Users\ogawa\Anaconda3\envs\abst\lib\site-packages\janome\tokenizer.py", line 204, in tokenize return list(self.__tokenize_stream(text, wakati, baseform_unk, '')) File "C:\Users\ogawa\Anaconda3\envs\abst\lib\site-packages\janome\tokenizer.py", line 207, in __tokenize_stream text = text.strip() AttributeError: 'list' object has no attribute 'strip'

追記

text = page.readlines()のあとにprint(text)をうつと読み込むファイルpage.jlの中身がそのまま出てきます。page.jlのなかみは日本語のニュースサイトの記事本文です
print(type(text))で型を調べるとリスト型でした
エラーについてはtokenizeにリスト型を入れたからだとわかりました。
リストの中身をひとつづつtokenizeに渡したいです。

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

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

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

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

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

guest

回答4

0

python

1import json 2import codecs 3from janome.tokenizer import Tokenizer 4 5t=Tokenizer() 6page = codecs.open('page.jl','r','utf-8') 7result = open('result.txt','w') 8text = page.readlines() 9for line in text: 10 tokens = t.tokenize(line) 11 for token in tokens: 12 print(token) 13 result.write(str(token)) 14 result.write('\n') 15 16page.close() 17result.close()

多分こうだと思います。

page.readlines()はリストを返していると思うので。

投稿2019/07/29 09:42

編集2019/07/29 20:43
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

abokadoishii

2019/07/29 13:04

回答ありがとうございます。 それでも同じエラーが出てしまいます
y_waiwai

2019/07/29 13:40

ああ、 tokens = t.tokenize(text) は、 tokens = t.tokenize(line) では
nerianighthawk

2019/07/29 13:42

tokens = t.tokenize(text) の行のtokenizeの引数が結局textのままになってしまっています。 このコードであればlineにする必要があるかと思います。
退会済みユーザー

退会済みユーザー

2019/07/29 20:43

ほんとですね。 直しておきます
guest

0

ベストアンサー

readlinesは問題なくうまく行っていると思います。
tokenize(text)がうまく行っていません。
tokenize関数の中でtextに対してstripと言う関数を呼び出そうとしてエラーが出ています。
したがって、readlinesで取ってきたものではtokenizeはできません。
普通にfor文で回すのがいいのではないでしょうか。

投稿2019/07/29 13:39

nerianighthawk

総合スコア544

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

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

abokadoishii

2019/07/29 13:57

for文でリスト要素をひとつづつ入れたら解決しました
guest

0

text = page.readlines()

のあとに、
print(text)
を入れて何がでてくるか提示してみてください。

投稿2019/07/29 13:16

y_waiwai

総合スコア87747

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

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

abokadoishii

2019/07/29 13:34

回答ありがとうございます。 リスト形式で入れられたpage.jlの中身が出てきます。
y_waiwai

2019/07/29 13:36

それを提示してくださいな。
guest

0

python3 readline
で google 検索してみましたか?

  • python: ファイルの読み込み–read()、readlines()、readline()

https://openbook4.me/projects/147/sections/885

投稿2019/07/29 12:09

katoy

総合スコア22324

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

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

abokadoishii

2019/07/29 13:06

googleで検索してもエラーに対する有効的な手段は見つけられなかった為質問してみました。
katoy

2019/07/29 13:39

今のケースでは、エラー対処より readlines() の使い方を調べることが近道です。 > ... googleで検索しても ... どんな検索顔を試みましか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問