職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

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

2021年02月28日 | Python
テキストファイルを読み込む

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【読み込み用にファイルを開く】
1)テキストファイルを読み込むためにファイルを開く場合、
・書式
f = open('myfile.txt', 'r')

2)文字エンコーディングを指定する場合
f = open('myfile.txt', 'r', encoding='UTF-8')

3)ファイルが存在しなかった場合
f = open('other.txt', 'r')
>> FileNotFoundError: [Errno 2] No such file or directory: 'other.txt'

【ファイル全体を読み込む(readメソッド)】
ファイルに含まれるテキストをすべて読み込む場合には read メソッドを使用する
・例文
f = open('myfile.txt', 'r')
data = f.read()
f.close()

サンプルコード
1) 次のコードを「sample2-1.py」ファイルに保存する。
f = open('myfile2.txt', 'r', encoding='UTF-8')

data = f.read()
print(data)

f.close()

2)テキストファイル「myfile2.txt」を書く、エンコードをUTF-8 で保存する。
明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。


3)実行する
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
========================= RESTART: D:/Data/sample2-1.py ========================
明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう
>>>
※細かな操作は省略

【ファイル全体を行単位で分割してリストとして取得する】
先ほどと同じくファイル全体を読み込んだあとで、読み込んだデータを行単位で分割しリストの要素として追加したものを取得する事ができる。→readlines(hint=-1)

ファイル全体を読み込み、行単位のデータを要素として追加したリストを返します。引数に最大文字数を指定した場合、指定した文字数分だけ読み込みます
・例文1
f = open('myfile2.txt', 'r')
 datalist = f.readlines()
 print (datalist[0])
 print (datalist[1])
 print (datalist[2])

f.close()
実行
========================== RESTART: D:/Data/test1-1.py =========================
明日の天気はどうだろう。

晴れたらいいな。

雨じゃなかったら公園に行こう。
>>>

・例文2→for文を使う
f = open('myfile2.txt', 'r')
 datalist = f.readlines()
for data in datalist:
print(data)

f.close()
実行
========================== RESTART: D:/Data/test1-2.py =========================
明日の天気はどうだろう。

晴れたらいいな。

雨じゃなかったら公園に行こう。
>>>

・改行を2回も行わないようにする
f = open('myfile2.txt', 'r')

datalist = f.readlines()
print (datalist[0], end=' ')
実行
========================== RESTART: D:/Data/test1-3.py =========================
明日の天気はどうだろう。
明日の天気はどうだろう。
明日の天気はどうだろう。
>>>


サンプルプログラム
1.「sample2-2.py」ファイルに次のコードを書く
f = open('myfile2.txt', 'r', encoding='UTF-8')

datalist = f.readlines()
for data in datalist:
print(data, end='')

f.close()

実行
========================= RESTART: D:\Data\sample2-2.py ========================
明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。
>>>

【ファイルから行単位で読み込む(readlineメソッド)】
ファイル全体ではなくファイルから 1 行ずつファイルの内容を読み込むには readline メソッドを使用します。readline(size=-1)⇔readlines(hint=-1)

1)例文1
1 行分だけファイルを読み込ませるプログラムを書いてファイル「test2-1.py 」に保存する。
f = open('myfile2.txt', 'r', encoding='UTF-8')

data = f.readline()
print (data)

f.close()
実行する
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
========================== RESTART: D:/Data/test2-1.py =========================
明日の天気はどうだろう。

>>>
2)例文2
ファイルの最後まで順番にファイルの内容を読み込んで処理するには、 while 文などを使って次のように記述し、ファイル「test2-2.py 」に保存する

f = open('myfile2.txt', 'r', encoding='UTF-8')
while True:
data = f.readline()
if data == '':
break
print (data)

f.close()
実行する
========================== RESTART: D:/Data/test2-2.py =========================
明日の天気はどうだろう。

晴れたらいいな。

雨じゃなかったら公園に行こう。
>>>
3)例文3
読み込んだデータの末尾から改行を取り除くプログラムを書き、ファイル「test2-3.py 」に保存する。
・プログラムコード
f = open('myfile2.txt', 'r', encoding='UTF-8')
while True:
data = f.readline()
if data == '':
break
print (data.rstrip('\n'))

・実行する
========================== RESTART: D:/Data/test2-3.py =========================
明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。
>>>

【ファイルから行単位で読み込む(for文)】
for 文を使用するとファイルから 1 行ずつファイルの内容を読み込むことができます。次のように記述します。

サンプルコード
f = open('myfile.txt', 'r', encoding='UTF-8')

for data in f:
print (data.rstrip('\n'))

f.close()

・サンプルコードを「sample2-4.py」ファイルに保存して、実行すると
========================= RESTART: D:/Data/sample2-3.py ========================
明日の天気はどうだろう。
晴れたらいいな。
雨じゃなかったら公園に行こう。
>>>
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python--ファイルを開く

2021年02月25日 | Python
ファイルを開く/ファイルを閉じる

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【ファイルを開く】
ファイルを開くには open 関数を使う。
・書式
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

1 番目の引数の file には開くファイル名を指定します。開くことに成功すると対応するファイルオブジェクトを返します(どのようなファイルオブジェクトが返されるのかは 2 番目の引数で指定したモードによってことなります)。ファイルを開くことができなければ OSError が送出されます。

2番目の引数:指定モード
r 読み込み用(ファイルが存在しない場合はエラー)
r+ 読み込みおよび書き込み用(ファイルが存在しない場合はエラー)
w 書き込み用(ファイルの中身をクリア)
w+ 読み込みおよび書き込み用(ファイルの中身をクリア)
a 書き込み用(ファイルの末尾に追加)
a+ 読み込みおよび書き込み用(ファイルの末尾に追加)
x 書き込み用(ファイルが存在している場合はエラー)
x+ 読み込みおよび書き込み用(ファイルが存在している場合はエラー)
b バイナリモード
t テキストモード
モードはデフォルトでテキストモードですが、 'b' をつけて 'r+b' や 'wb' のようにすることでバイナリモードになります。

4 番目の引数:エンコーディング
ascii
cp932
euc_jp
shift_jis
utf-8 (utf_8)

【ファイルオブジェクトのクラス】
ファイルのオープンに成功すると、ファイルオブジェクトが返されます。ファイルオブジェクトのクラスが何になるのかは open 関数で使用したモードによって異なり次のようになります。
r io.TextIOWrapper
r+ io.TextIOWrapper
rb io.BufferedReader
r+b io.BufferedRandom

w io.TextIOWrapper
w+ io.TextIOWrapper
wb io.BufferedWriter
w+b io.BufferedRandom

【ファイルを閉じる】
ファイルの利用が終わりましたら close メソッドを使ってファイルオブジェクトを閉じます。


a io.TextIOWrapper
a+ io.TextIOWrapper
ab io.BufferedWriter
a+b io.BufferedRandom

x io.TextIOWrapper
x+ io.TextIOWrapper
xb io.BufferedWriter
x+b io.BufferedRandom

1)サンプルプログラム
「sample1-1.py」のサンプルコード
f = open('myfile.txt', 'r')

data = f.read()
print(data)

f.close()

2)ファイル「myfile.txt」
明日の天気はどうだろう。
晴れるといいな。

3)実行
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
========================= RESTART: D:/Data/sample1-1.py ========================
明日の天気はどうだろう。
晴れるといいな。
>>>
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

時刻などの値への加算減算

2021年02月24日 | Python
日付や時刻の値への加算・減算と値の比較

日付や時刻の値に対して日数や分数などを加算したり減算したりした新しいインスタンスを生成することができます。

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【日付や時刻に対する演算】
datetime クラスのインスタンスや date クラスのインスタンスに対して、時刻差を表す timedelta クラスのインスタンスを加算や減算して新しいインスタンスを生成することができる。

サンプルコード
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import datetime
>>> dt1 = datetime.datetime(2021, 2, 24, 10, 40, 30, 551)
>>> print(dt1)
2021-02-24 10:40:30.000551
>>> dt2 = dt1 + datetime.timedelta(days=1)
>>> print(dt2)
2021-02-25 10:40:30.000551
>>> dt3 = dt1 + datetime.timedelta(days=-1)
>>> print(dt3)
2021-02-23 10:40:30.000551
>>>
元の日付の値と比べて 1 日だけ未来の日付および 1 日だけ過去の日付になっています。

【日付と日付の差を求める】
2 つの datetime クラスのインスタンスに対して、どれだけ日時や時刻の差があるのかを求めることができます

サンプルコード
>>> import datetime
>>> dt1 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551)
>>> print(dt1)
2020-07-21 06:12:30.000551
>>> dt2 = datetime.datetime(2020, 5, 12, 6, 45, 12, 7721)
>>> print(dt2)
2020-05-12 06:45:12.007721
>>>
>>> print(dt1 - dt2)
69 days, 23:27:17.992830
>>>
timedelta クラスではインスタンス毎に次の属性を参照することができます。
・属性
timedelta.days : 日 -999999999 から 999999999
timedelta.seconds : 秒 0 から 86399
timedelta.microseconds : マイクロ秒 0 から 999999

サンプルコード
>>> import datetime
>>> dt1 = datetime.datetime(2020, 7, 21, 6, 12, 30, 551)
>>> print(dt1)
2020-07-21 06:12:30.000551
>>> dt2 = datetime.datetime(2020, 5, 12, 6, 45, 12, 7721)
>>> print(dt2)
2020-05-12 06:45:12.007721
>>> td1 = dt1 - dt2
>>> print(td1)
69 days, 23:27:17.992830
>>> print(td1.days)
69
>>> print(td1.seconds)
84437
>>> print(td1.microseconds)
992830
>>>

【日付と日付を比較する】
2 つの datetime クラスのインスタンスを比較して、どちらが未来の日付なのか調べることができる。

サンプルコード
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import datetime
>>> d1 = datetime.date(2020, 7, 21)
>>> d2 = datetime.date(2020, 5, 12)
>>> print(d1)
2020-07-21
>>> print(d2)
2020-05-12
>>> print(d1 > d2)
True
>>> t1 = datetime.time(6, 12, 30, 551)
>>> t2 = datetime.time(8, 4, 17, 32814)
>>> print(t1)
06:12:30.000551
>>> print(t2)
08:04:17.032814
>>> print(t1 > t2)
False
>>>
2 つの date クラスのインスタンスを比較し、そのあとで 2 つの time クラスのインスタンスを比較しました。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

時刻などの値の置換について

2021年02月23日 | Python
日付や時刻の一部の値を別の値に置き換えたインスタンスを生成する

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【日付や時刻の値を別の値に置き換える】
datetime クラスのインスタンスに対して日付や時刻の値を別の値に置き換えた新しいインスタンスを作成するには replace メソッドを使用する。

サンプルコード
>>> import datetime
>>> tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
>>> dt = datetime.datetime.now()
>>> print(dt);
2021-02-23 11:16:03.026738
>>> print(dt.replace(hour=4, minute=0, second=0))
2021-02-23 04:00:00.026738
>>> print(dt.replace(year=2018, month=4, day=1))
2018-04-01 11:16:03.026738
>>> print(dt.replace(tzinfo=tokyo_tz))
2021-02-23 11:16:03.026738+09:00
>>>
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

時刻の値を書式化して文字列にする

2021年02月23日 | Python
日付や時刻の値を指定した書式を使って文字列として取得する

【開発環境】
OS:Win10(64ビット)
言語:Python3.8.5(64bit)
Python の統合開発環境:IDLE
IDLEの操作は別サイト参照のこと

【日付や時刻の値を指定の書式で文字列として取得する】
例えば datetime クラスのインスタンスが持つ日付や時刻の値を、書式を指定して "2020/07/22 10:4:38" のような文字列として取得することができる。

・datetime.strftime(format)
書式コード
%y : 2桁の年 00, 01, ..., 99
%Y : 4桁の月 0001, 0002, ..., 9999
%b : 月名の短縮形 Jan, Feb, ..., Dec ※1
%B : 月名 January, February, ..., December ※1
%m : 月 01, 02, ..., 12
%d : 日 01, 02, ..., 31
%H : 時(24時間) 00, 01, ..., 23
%I : 時(12時間) 00, 01, ..., 11
%p : AM or PM ※1
%M : 分 00, 01, ..., 59
%S : 秒 00, 01, ..., 59
%f : マイクロ秒 000000, 000001, ..., 999999
%z : タイムゾーン (空文字列), +0000, -0400 etc
%Z : タイムゾーン名 (空文字列), UTC, EST
%a : 曜日の短縮形 Sun, Mon, ..., Sat ※1
%A : 曜日 Sunday, Monday, ..., Saturday ※1
%c : 日付と時刻を適切に表示します ※1
%x : 日付を適切に表示します ※1
%X : 時刻を適切に表示します ※1

サンプルコード
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> import datetime
>>> tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
>>> dt = datetime.datetime.now(tokyo_tz)

>>> print(dt.strftime("%Y/%m/%d %a %H:%M:%S"))
2021/02/23 Tue 10:55:05
>>> print(dt.strftime("%B %d,%Y %p %I:%M:%S:%f%z"))
February 23,2021 AM 10:55:05:229797+0900
>>>

【ロケールを設定する】
先ほど掲載した書式コードで ※1 をつけたものは設定されているロケールによって値が異なります。例えば曜日を "Monday" ではなく "月曜日" という文字列にしたい場合は、ロケールを日本に設定しておきます。

サンプルコード
>>> import datetime
>>> import locale
>>>
>>> locale.setlocale(locale.LC_ALL, 'ja_JP.UTF-8')
'ja_JP.UTF-8'
タイムゾーン→ UTC との時間に関する差を指定します。東京(日本)のタイムゾーンを取得するには hours=9
>>> tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
>>> dt = datetime.datetime.now(tokyo_tz)
>>> print(dt.strftime("%Y/%m/%d %a %H:%M:%S"))
2021/02/23 火 10:59:30
>>> print(dt.strftime("%B %d,%Y %p %I:%M:%S:%f%z"))
2月 23,2021 午前 10:59:30:411243+0900
>>>
ロケールを設定することによって曜日や午前/午後などの表示が日本語で行われるようになりました。
コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする