2017-12-18 10 views
-1

私は、列の中の生の数値データを持つ行を取り、適切なものに変換する関数を書いています分(そのcsvファイル)。文字列が簡単になるので、すべての列は文字列として保持されています。しかし、一部のデータを(文字列でも)時刻形式に変換すると、タイトルに記述されているエラーが発生します。私の機能は、以下のようになります。私はduration_in_mins()を実行したとき、私はトレースバックに応じて、エラーを取得していますどこPython 3.6 - いくつかの文字列を時間に変換する際に '整数が必要です(strが得られました)'

def duration_in_mins(row, city): 
    duration = [] # Make an empty list 
    form = '%M.%S' 

    if city == 'X': 
     city_file = open('X.csv') 
     city_csv = csv.reader(city_file) 

     for row in city_csv: 
      duration.append(row[1]) # The column that contains the strings 

      for i in duration: 
       datetime.datetime.fromtimestamp(i).strftime(form, 'minutes') # Conversion 
     else: 
      return 'Error' 
    return duration 

ラインdatetime.datetime.fromtimestamp(i).strftime(form, 'minutes')です。トレースバックは文字列を数値に変換してから時間に変換するように指示していますか? datetimeは文字列を直接時間に変換することはできませんか?

duration_in_mins(5, 'X) 
line 39, in duration_in_mins 
datetime.datetime.fromtimestamp(i).strptime(form, 'minutes') 
TypeError: an integer is required (got type str) 
+0

エラーとトレースを表示します。 – Carcigenicate

+0

'for city_csv:'これは正しく見えません。あなたはここで何をしようとしていますか? – mtkilic

+0

読み取られた元のcsvファイルから特定の列 '[1]'のみを含むように 'duration'リストを追加します。それは何をすべきか... –

答えて

1

まず、あなたのコードと報告されたエラーの間に矛盾がありますどのような関数を正確に理解するためにエラーを含む行を分割する必要があります例外原因:

x = datetime.datetime.fromtimestamp(i) 
x.strftime(form, 'minutes') # Conversion 

をそして、あなたは、おそらくエラーが代わりにSTRの整数タイムスタンプ引数を必要とfromtimestamp(ts)から来ていることがわかります。

この引数をある時点でint型に変換してください。すべてがokである必要があります。

+0

ありがとう、私は近づいています。おはようございます! –

1

あなたが言うように、datetime.fromtimestamp()は番号が必要ですが、あなたはそれを文字列を与えています。 Pythonは "あいまいさに直面して推測する誘惑を拒否する"という哲学を持っているので、間違った型のオブジェクトを関数に与えると例外がスローされます。コードと

その他の問題:

  • strftime()方法は一つだけの引数を取りますが、あなたはそれをもう一度1を渡し です。

  • また、これらのループをネストすることを意味しましたか?別の の値をdurationに追加するたびに、リストのすべての値を時刻に変換し、 変換が成功した場合、変換の結果は になり、どこにも保存されません。

    datetime.datetime.fromtimestamp(i).strftime(form, 'minutes') # Conversion 
    

    line 39, in duration_in_mins 
    datetime.datetime.fromtimestamp(i).strptime(form, 'minutes') 
    TypeError: an integer is required (got type str) 
    

    strptimeに注意してください、あなたは、次にstrftime

    とは異なるされています

関連する問題