LoginSignup
6
1

More than 3 years have passed since last update.

テキストファイルを読み込む(python3)

Last updated at Posted at 2019-05-08

何番煎じかよくわからないけれど、自分用メモです。
適宜更新。

1行1要素のリストとして読み込む(改行コードあり)

with open("hoge.txt",'r') as f:
    lines = f.readlines()

readlinesは各行を要素としたリストを作る。各要素はstr型。
各行末尾にある改行コードを気にしないのであればこれでオッケー。(どんなとき…?いつも消えててほしいんだけど。)

1行1要素のリストとして読み込んで、各要素を区切り文字で更に分割する (190604追記)

with open("hoge.txt") as f:
    lines = f.readlines()
for s in lines:
    list = s.split("任意の区切り文字")

とかすると、ある行を区切り文字で分けたものが要素として含まれるようなリストが得られる。
(もっとスマートな方法がありそうな気もするが…)

ここまでは文末の改行コードが含まれてしまっていたが、改行コードを消したい場合は下の通り。

1行1要素のリストとして読み込む(改行コードなし)

list = []
for i in open("hoge.txt", 'r').readlines():
    istrp = i.rstrip('\n') 
    list.append(istrp)

readlinesで作ったリストの各要素に対して改行コードの削除処理。
3行目でrstripを用いて、各行末尾に含まれる改行コードを削除。
この改行コード、OSやバージョンごとに違うらしいので注意。
ファイルはopenしたらcloseが原則必要だが、for文の中でopenしているときはwith open同様に自動的にクローズされる。

(190604 追記)

with open("hoge.txt") as f:
    lines = f.read().splitlines()
print(lines)

コメントに頂いたこちらの方法だと、改行コードを気にせず、改行コードを消した状態の行を要素に持つリストが生成できる。
コメントくださった@shiracamus様ありがとうございます。

UnicodeDecodeError: 'ascii' codec can't decode byte 0x83 in position 122: ordinal not in range(128)を回避する (20190615追記)

日本語を含むようなtxtファイルhoge.txtを読み込もうとしたところ、タイトルのようなエラーが出た。
回避するには、codecsモジュールのopenでエンコーディングとエラーに対する処理を指定してファイルを開く必要があった。

with codecs.open("hoge.txt", 'r', 'ascii', 'ignore') as f:
   lines = f.readlines()
6
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1