2016-11-04 3 views
1

は、私の目標は、HMACを含む行の特定の文字のラインとリターン・カウントをループにある私のログインファイルPythonの日付エラー

10/21/2015 10:16:42 AM Following hmac:c35330404902c0b1bb5c6d0718407ea12b25a464433bd1e69152ccc0e0b89c9f with is already in database so dropping 
11/21/2015 10:16:42 AM The data for the duplicate Hmac is : HF 13300100012015-06-15 19:30:21+0000+ 12.61 0.010 1686.00 
07/21/2015 10:16:42 AM Following hmac:84d9cdb2145b7c3e0fa2d099070b7bd291c652f30ca25c69240e33ebbd2b8677 with is already in database so dropping 
07/21/2016 10:16:42 AM The data for the duplicate Hmac is : HF 13300100012015-06-15 20:16:18+0000+ 12.60 0.045 1686.00 
07/20/2016 10:16:42 AM Following hmac:a24d19d340651e694bff854ae7469dd779b60037228bf047d8f372dee4a731e0 with is already in database so dropping 
07/20/2016 10:16:42 AM The data for the duplicate Hmac is : HF 13300100012015-06-15 20:31:25+0000+ 12.62 0.045 1685.00 
07/20/2016 10:16:42 AM Following hmac:4e239a4b69108833e9cbc987db2014f9137679860df0ca8efdf7d09c4897d369 with is already in database so dropping 
07/19/2016 10:16:42 AM The data for the duplicate Hmac is : HF 13300100012015-06-15 20:46:27+0000+ 12.61 0.040 1685.00 

のいくつかの数行です。私はすでに総計を計算していますが、私は最後の1年間の行数を返したいと思います。各ラインの日付部分は私にエラー

とValueErrorを与えて抽出しようとすると:未変換データが残っている:私は試してみましたが、解決策を見つけることができません

。ここで

def fileCount(fileName): 

    with open(fileName) as FileObj: 

     Count = 0 
     todayDate = date.today() 
     OneYear = str(todayDate - timedelta(days=365)) 
     OneMonth = str(todayDate - timedelta(days=30)) 
     ThreeMonths = str(todayDate - timedelta(days=90)) 

     while True: 

      line = FileObj.readline() 

      Lines = "-".join(line[:11].split("/")) 

      convertDate = datetime.strptime(Lines, '%m-%d-%Y') 

      print convertDate 

      if not line: 
       break 
      if "Following hmac" in line: 

       Count += 1 

     print "The total count is ", Count 

# Call The function 
def main(): 

    filePath = 'file.txt' 

    fileCount(filePath) 

if __name__ == "__main__": 

    main() 

が、私はその意志日付算術演算のためにそれを使用して日付を抽出したい日時輸入はtimedeltaから日時インポート日時 から日時インポート時 からdatetime型のインポート日付 からの私のコード 輸入OSです最後の3ヶ月、6ヶ月、12ヶ月間カウントを返すことができます。

答えて

0

スライスの停止インデックスには、指定した日付形式では考慮されていない末尾のスペースが含まれています。

あなたはストリップスペース必要があります:あなたの形式で余分なスペースでの会計処理

Lines = "-".join(line[:10].split("/")) 

>>> datetime.strptime(Lines.rstrip(), '%m-%d-%Y') 
datetime.datetime(2015, 10, 21, 0, 0) 

またはその代わり1110へのインデックスを変更するには完全にスペースを除外する別の修正:

convertDate = datetime.strptime(Lines, '%m-%d-%Y ') 

あなたはtry/exceptを使用して日付文字列なしで、このような空白行や行などの他のエラーを処理できます。

lines = "-".join(line[:10].split("/")) 
try: 
    convert_date = datetime.strptime(lines, '%m-%d-%Y') 
    print convert_date 
except ValueError: 
    print 'This line has a problem:', lines 
+0

モーセKoledoye @。早速の対応、ありがとうございました。提案されたソリューションのいずれかを試行すると、別のエラーValueErrorが発生します:時刻データ ''がフォーマット '%m-%d-%Y'と一致しません。私はPython 2.7を使用しています – user1895915

+0

ファイルに空白行があります。日付文字列を含む行だけを解析する必要があります。その行を 'try/except ValueError'にラップします。回答の更新を参照してください。 –