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

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

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

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

Python

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

Q&A

解決済

2回答

3414閲覧

時刻の書いた文字列を読み込み、datetimeで時間に変換して、時間差を求めるプログラムでエラーが出て困っています。

Aki1000

総合スコア78

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/12/15 22:30

以下のような、二つの時間の時間差を表示するプログラムを組みました。
デイリーログの中には文字列で時間が入っています。ログの項目を除き時間の文字列を偶数行と奇数行にとりだし、時間差を取り、表示します。

Python

1import datetime 2 3with open(r"デイリーログ.txt", 'r', encoding='utf-8') as file: 4 temp = file.read() 5 for i,x in enumerate (temp.split('\n')): 6 time = x[-8:] 7 if i % 2 == 0: 8 time1 = datetime.datetime.strptime(time, '%H:%M:%S') 9 else: 10 time2 = datetime.datetime.strptime(time, '%H:%M:%S') 11 diftime = time2 - time1 12 print (x[:6],diftime)

ここで、以下のようなエラーが出ます。

Traceback (most recent call last):
File "C:/Python/temp/TEST.py", line 8, in <module>
time1 = datetime.datetime.strptime(time, '%H:%M:%S')
File "C:\Python\Python35\lib_strptime.py", line 510, in _strptime_datetime
tt, fraction = _strptime(data_string, format)

 エラー表示の中間、ここに結果は正しく表示される。

File "C:\Python\Python35\lib_strptime.py", line 343, in _strptime
(data_string, format))
ValueError: time data '' does not match format '%H:%M:%S'

ログを書き出す所は

Python

1 def logwrite(self,addtxt="",filename="デイリーログ.txt"): 2 now = datetime.now() 3 nowtext=str(sys._getframe(1).f_code.co_name)+addtxt+(' {0:%Y-%m-%d %H:%M:%S}\n'.format(now)) 4 5 print(nowtext) 6 pathstring = os.path.join(self.workdir, filename) 7 with open(pathstring, 'a', encoding='utf-8') as file: 8 file.write(str(nowtext))

で書き出しています。
メインの読み込むコードにおいて、改行コードでテキストを分割しているのですが、途中は良いけど、最後の1行に改行コードがあるため、最後のデータの後に、空白のデータがあることになっている感じだと思うのですが、どう直して良いかわかりません………

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

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

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

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

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

guest

回答2

0

ベストアンサー

... 最後の1行に改行コードがあるため、最後のデータの後に、空白のデータがあることになっている ...

time = x[-8:]
のあとで
if time == ""
で 有効行かを判定する処理を追加すればよいと思います。

投稿2018/12/15 22:56

katoy

総合スコア22324

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

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

Aki1000

2018/12/16 04:26

ありがとうございました。 if time == "": break をつけたら、問題なく動くようになりました。
Aki1000

2018/12/16 04:37 編集

なにか、このforループで1回前まで回す方法とか、最後のループを判定する方法が出来ないかと考えてましたが、確かにこれでも止まりますね……。
guest

0

文字列の空白を削除するならstripやらtrimですが、
まずはその文字列がきちんとフォーマットどおりになってるのか見てみたらどうでしょう

投稿2018/12/15 22:42

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問