2014-10-30 43 views
0

步驟處理一個文件的結尾不可打印的ASCII字符:在Python

  • 我有一些DBF文件。
  • 我使用DBF Converter將它們導出到SQL。
  • 然後我使用Python來做一些基本的字符串清理並導入到SQL Server中。

問題:

不知怎的,我不知道怎麼回事,在DBF文件一行轉換出ASCII非打印字符SUB。 Python將此視爲文件的結尾,因此它會讓我不知道我沒有正確地終止該字符串。

我如何在Windows機器上用所有其他東西替換所有ASCII符號,而不用Python翻出?

+1

您是否試過在二進制模式下打開文件呢? – 2014-10-30 14:24:48

+0

Python不會將\ x1a作爲文件結束標記。你必須使用某種類型的dbf解析器,這就是有問題的代碼。你能給我們提供更多關於你正在使用的細節嗎? – tdelaney 2014-10-30 15:43:07

+0

@ IgnacioVazquez-Abrams--文本模式改變了行尾,但是隻留下其他字符。 \ x1a不應該受到影響。 – tdelaney 2014-10-30 15:46:57

回答

2

您可以使用re模塊替換不可打印的符號,但這可能無法解決您在此處遇到的問題。 DBF是一種二進制文件格式,其中有很多非ascii字符。

import re 
ascii_sym_re = re.compile(r'[\x00-\x09\x0b-\x1f\x7f-\xff]', re.DOTALL|re.MULTILINE) 
print ascii_sym_re.sub('.', 'hello\x1athere') 
with open('somefile','rb') as fp_in, open('somefile-scrubbed', 'wb') as fp_out: 
    fp_out.write(ascii_sym_re.sub('.', fp_in.read()) 
+0

該代碼超級沒有爲我工作。 – XtinaS 2014-10-30 19:37:31

+0

@XtinaS - 哎呀,我的壞。我已經修復了正則表達式來匹配適當的範圍,並修復了子類以'。'替換時髦的字符。 – tdelaney 2014-10-30 19:56:12

+0

修好之後,添加一個括號並將fp更改爲fp_in,它完全起作用。非常感謝! – XtinaS 2014-10-30 22:16:16