15

だから私はPythonの文字列が不変であることを知っていますが、私は文字列を持っています:

c['date'] = "20110104"

どちらに変換したいですか

c['date'] = "2011-01-04"

私のコード:

c['date'] = c['date'][0:4] + "-" + c['date'][4:6] + "-" + c['date'][6:]

少し複雑なようですよね?それを別の変数として保存してから同じことをするのが最善でしょうか?それとも基本的に違いはありませんか?

4

8 に答える 8

24

あなたは.join()それを少しきれいにするために使うことができます:

d = c['date']
'-'.join([d[:4], d[4:6], d[6:]])
于 2013-01-17T20:59:17.073 に答える
7

日付はPythonのファーストクラスのオブジェクトであり、日付を操作するための豊富なインターフェイスを備えています。ライブラリは日時です。

> import datetime
> datetime.datetime.strptime('20110503','%Y%m%d').date().isoformat()
'2011-05-03'

車輪の再発明をしないでください!

于 2013-01-17T22:51:06.957 に答える
6

文字列の連結よりも文字列の書式設定を使用する方が適切です

c['date'] = '{}-{}-{}'.format(c['date'][0:4], c['date'][4:6], c['date'][6:])

上で述べたように、文字列は不変であるため、文字列の連結は一般的に遅くなります。

于 2013-01-17T20:59:05.853 に答える
3
s = '20110104'


def option_1():
    return '-'.join([s[:4], s[4:6], s[6:]])

def option_1a():
    return '-'.join((s[:4], s[4:6], s[6:]))

def option_2():
    return '{}-{}-{}'.format(s[:4], s[4:6], s[6:])

def option_3():
    return '%s-%s-%s' % (s[:4], s[4:6], s[6:])

def option_original():
    return s[:4] + "-" + s[4:6] + "-" + s[6:]

それぞれで実行%timeitすると、これらの結果が得られます

  • option_1:ループあたり35.9 ns
  • option_1a:ループあたり35.8 ns
  • option_2:ループあたり36 ns
  • option_3:ループあたり35.8 ns
  • option_original:ループあたり36 ns

だから...パフォーマンスの改善はわずかなので、最も読みやすいものを選んでください

于 2013-01-17T21:06:00.060 に答える
1

私はおそらくこのようにそうするでしょう、それは大きな利益があるということではありません:

d = c['date']
c['date'] = '%s-%s-%s' % (d[:4], d[4:6], d[6:])

大きな改善点(imho)は、文字列の連結を回避することです。

于 2013-01-17T20:59:24.657 に答える
1

私は通常、「正規表現を使用する」と言っている人ではありませんが、これはその良いユースケースです。

import re    
c['date']=re.sub(r'.*(\w{4})(\w{2})(\w{2}).*',r"\1-\2-\3",c['date'])
于 2013-01-17T22:03:41.660 に答える
1

それを適切な日時オブジェクトに変換したいのか、それとも単にフォーマットをハードコーディングしたいのかわからない場合は、次のようにすることができます。

from datetime import datetime
result = datetime.strptime(c['date'], '%Y%m%d')
print result.date().isoformat()

入力: '20110104'

出力: '2011-01-04'

于 2013-01-17T23:09:46.983 に答える
1

一連の文字列にハイフンを追加して日時

import datetime
for i in range (0,len(c.date)):
  c.date[i] = datetime.datetime.strptime(c.date[i],'%Y%m%d').date().isoformat()
于 2020-05-14T12:37:12.267 に答える