2015-12-10 30 views
0

我有一個混合編碼文件,我只想保留字母數字和一些字符,如:。(點),/(破折號),|(豎線),空格(不包括\ t,\ n,\ f)。其他角色應該被白色空間替代。結果內容將發送到另一個文件。只保留字母數字字符和預定義的特定字符

下面是我的代碼:

def clean(input): 
    string_list = list(input) 
    for idx in range(0, len(string_list)): 
     if not re.match("\w|\s|\||\.|/", string_list[idx]): 
      string_list[idx] = " " 
    return "".join(string_list) 
file_in = "input.txt" 
file_out = "output.txt" 
with open(file_in, "r") as f1: 
    with open(file_out, "w") as f2: 
     lines = f1.readlines() 
     for line in lines: 
      line_raw = clean(line) 
      f2.write(line_raw) 
print "Finished!" 

我發現我的輸出文件仍然包含像「換」或「新線」的一些特殊字符存在(他們應該被刪除)。 有沒有可能有一些不可見的Unicode字符仍然存在? 我懷疑我應該閱讀二進制模式的文件,並使用正則表達式像這樣的鏈接: python: regular expression search pattern for binary files (half a byte) 但我還沒有成功。我怎麼能達到我的目的?

EDIT1:我上面提到的空格應該是一個「真正的白色空間」(當我們使用空格鍵生成的,而不是\ t,\ n,\樓等)

+1

這是因爲表單提要等被包含在空白(\ s)的定義中。相反,您可能需要明確匹配空格和製表符。 –

+0

順便說一句,你用空白替換一個空格... –

+0

給我們一個輸入文件的文本例子 – saikumarm

回答

0

,因爲你不能發佈數據 試試這個

>>> import re 
>>> test_text = 'grep -i 'blair' filename.log | more' 
>>> print re.sub(r'[^|\w\.]', ' ', test_text) 
'grep i blair filename.log more' 
+0

謝謝你的幫助。這是我需要的。 (我保留「\」,所以我稍微修改你的代碼: re.sub(r'[^ | \ w \ ./]','',test_text) –

相關問題