2016-03-26 76 views
0

我有一個電子表格,其中包含日期,通常以「DD \ MM \ YYYY」格式編碼爲字符串,如08 \ 09 \ 2014。我使用的函數將數據作爲unicode返回,並使用Python 2.7。於是,我開始:在Python中使用unicode字符串轉發反斜槓

> data_prob_raw 
08\09\2014 

將字符串轉換爲datetime對象(datetime.parser.parse()),我需要一個字符串沒有「\」,但我沒有找到一個方法來消除或用'/'替換有問題的字符。 我已經嘗試過使用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讀取文件到一個文件時,你應該得到一個轉義字符串。

我有一個名爲test.txt文件與內容01\01\2010

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

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

,我對字符串使用.replace沒有問題。可能發生的情況是,您正在直接創建變量,以測試功能,並且當您應該使用data_prob_raw='08\\09\\2014'進行測試或從文件中讀取日期時,正在分配data_prob_raw='08\09\2014'

正如zondo建議您也可以使用這樣的原始刺激; data_prob_raw=r'08\09\2014'。請注意前面的rr告訴Python將反斜槓當作文字反斜槓而不是解析轉義字符。

+0

不是由我創建的變量data_prob_raw,但我找遍這麼多的解決方案(直接創建在Python Shell變量太)。可能我感到困惑。簡單地說,現在它工作!謝謝 –

0

要處理字符串中的簡單反斜槓,您只需將其放置兩次即可。它是轉義字符,所以下面的替換應該足夠了:

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) 
相關問題