2016-03-26 11 views
0

通常、日付は「DD \ MM \ YYYY」の文字列として08 \ 09 \ 2014としてエンコードされたスプレッドシートがあります。私が使用する関数はデータをユニコードとして返し、Python 2.7を使用します。私は「\」せずに文字列を必要とするが、私は削除する方法を見つけるしていないか、DateTimeオブジェクト(datetime.parser.parse())に文字列を変換するにはPythonのユニコード文字列で転送するバックスラッシュ

> data_prob_raw 
08\09\2014 

:だから、私はで始まります問題のある文字を '/'で置き換えます。 私はすでにUnicodeのコードを試してみました:

data_prob_raw=data_prob_raw.replace(r'\x81', '/201') 
data_prob_raw=data_prob_raw.replace(u'\x81', '/201') 

単に文字列:

data_prob_raw=data_prob_raw.replace('\201','/201') 

しかし、それは何も変わりません:

08\09\2014 

は、文字列をデコード:

data_prob_raw=data_raw_unic.encode('ascii') 

しかし、\ 201は、128文字のASCII文字になります。

UnicodeDecodeError: 'ascii' codec can't decode byte 0x81 in position 0: ordinal not in range(128) 

どうすればこの問題を解決できますか?

答えて

2

pythonからファイルにデータを読み込むときは、エスケープ文字列を取得する必要があります。

は私が内容

>>> with open(r'C:\users\john\desktop\test.txt') as f: 
     s = f.read() 

>>> s 
'01\\01\\2010' 
>>> s.replace('\\', '/') 
'01/01/2010' 

01\01\2010test.txtというファイルがあると私は、文字列に.replaceを使用して問題はありません。何が起こっているのかは、機能をテストするために変数を直接作成し、data_prob_raw='08\\09\\2014'でテストするか、ファイルから日付を読み取るときにdata_prob_raw='08\09\2014'を割り当てることです。

zondoが提案したように、生の刺し傷もそうすることができます。 data_prob_raw=r'08\09\2014'。前述のrに注目してください。rは、エスケープ文字の解析ではなく、バックスラッシュをリテラルのバックスラッシュとして扱うようにPythonに指示しています。

+0

変数data_prob_rawは、私が作成したが、私は(あまりにも直接的にはPythonシェル内の変数を作成する)ように多くのソリューションを検索されません。おそらく私は混乱するだろう。単純に、今すぐ動作します!ありがとう –

0

単に文字列内のバックスラッシュを処理するには、その文字列を2回入力するだけです。エスケープ文字なので、次の置換えで十分です。

data_prob_raw=data_prob_raw.replace('\\', '/') 
0

交換する必要はありません。 datetimeは、指定した任意の日付フォーマットを解析することができます

>>> data = ur'08\09\2014' 
>>> from datetime import datetime 
>>> datetime.strptime(data,ur'%m\%d\%Y') 
datetime.datetime(2014, 8, 9, 0, 0) 
関連する問題