見出し画像

テキストファイルの読み込みについて2

read()、readlines()、readline()メソッドの違いがいまいちわからないのでちょっとサンプルのプログラムで実際にテキストを抽出してみることにしました。

抽出する箇所

抽出するのはテキストにある

提出人   544506015206
にしてみます

read()で実行

コードは以下のようになっております。

import os
import re
 #ファイルの読み込み 
path = '1pdf.txt'
 #ファイルを開く 
with open(path) as open_file:
 areas = open_file.read()
 #str型に変換 
 str_areas = str(areas)
 #print (str_areas)

 results = re.findall(r"提出人+[\s\S]+[0-9]{12}", str_areas)
 for result in results:
   print(result)

ファイル名:sample.py
実行コマンド:python sample.py

コマンドを実行すると・・・

提出人   544506015206

となります。

readlines()で実行

コードは以下のようになっております。

import os
import re
 #ファイルの読み込み 
path = '1pdf.txt'
 #ファイルを開く 
with open(path) as open_file:
 areas = open_file.readlines()
 #str型に変換 
 str_areas = str(areas)
 #print (str_areas)

 results = re.findall(r"提出人+[\s\S]+[0-9]{12}", str_areas)
 for result in results:
   print(result)

ファイル名:sample.py
実行コマンド:python sample.py

コマンドを実行すると・・・

提出人\u3000\u3000\u3000544506015206

となります。\u3000は全角スペースとなります。

readline()で実行

コードは以下のようになっております。

import os
import re
 #ファイルの読み込み 
path = '1pdf.txt'
 #ファイルを開く 
with open(path) as open_file:
 areas = open_file.readline()
 #str型に変換 
 str_areas = str(areas)
 #print (str_areas)

 results = re.findall(r"提出人+[\s\S]+[0-9]{12}", str_areas)
 for result in results:
   print(result)

ファイル名:sample.py
実行コマンド:python sample.py

コマンドを実行すると・・・

[macan@localhost ~]$ python sample.py
[macan@localhost ~]$

となります。

それぞれ挙動が違います。

全角スペースを取り除いてみたい

全角スペースを取り除いて抽出できないか試したみたいと思います。

read()で実行

コードは以下のようになっております。

import os
import re
 #ファイルの読み込み 
path = '1pdf.txt'
 #ファイルを開く 
with open(path) as open_file:
 areas = open_file.readl()
 #str型に変換 
 str_areas = str(areas)
 #print (str_areas)

 results = re.findall(r"提出人+[\s\S]+[0-9]{12}", str_areas)
 for result in results:
     result = result.replace(' ', '')
     print(result)

ファイル名:sample.py
実行コマンド:python sample.py

コマンドを実行すると・・・

提出人544506015206

スペースが消えました。

readlines()で実行

コードは以下のようになっております。

import os
import re
 #ファイルの読み込み 
path = '1pdf.txt'
 #ファイルを開く 
with open(path) as open_file:
 areas = open_file.readlines()
 #str型に変換 
 str_areas = str(areas)
 #print (str_areas)

 results = re.findall(r"提出人+[\s\S]+[0-9]{12}", str_areas)
 for result in results:
     result = result.replace(' ', '')
     print(result)

ファイル名:sample.py
実行コマンド:python sample.py

コマンドを実行すると・・・

提出人\u3000\u3000\u3000544506015206

変化なし。コードにスペースを削除(厳密には置換)をいれておりますがここでは全角の文字列としてでております。

読み込み方法が違うだけでテキストの抽出で差がでました。これは今後気をつけないといけないなというとこだと思います。

replace('\u3000', '')で実行

readlinesの時は全角スペースがでてしまいました。そこでコードを一部変えて消えないか試してみます。

import os
import re
 #ファイルの読み込み 
path = '1pdf.txt'
 #ファイルを開く 
with open(path) as open_file:
 areas = open_file.readlines()
 #str型に変換 
 str_areas = str(areas)
 #print (str_areas)

 results = re.findall(r"提出人+[\s\S]+[0-9]{12}", str_areas)
 for result in results:
     result = result.replace('\u3000', '')
     print(result)

\u3000を入れてみました。これで置換できるか見てみます。

ファイル名:sample.py
実行コマンド:python sample.py

コマンドを実行すると・・・

提出人\u3000\u3000\u3000544506015206

変わりませんでした。readとreadlinesで処理が違うっぽいです。

・read() – ファイルを全て読み込み、その文字列データに対して処理を行う
・readlines() – ファイルを全て読み込み、1行毎に処理を行う

この違いなのかなと。readは文字列に対して処理をする。readlinesは行に対して処理をする。

なのかなと思いました。

お役に立ちましたか?

投げ銭をいただけるともっと頑張れます!
・note
・仮想通貨(bitflyer)
のどちらでも構いません
ビットコインアドレスは以下になります
3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS

この記事が気に入ったらサポートをしてみませんか?