2013-11-27 51 views
3

我是新手。但是,我設法從txt文件(unicode)中提取一些行並將它們寫入另一個文件中。Python:Unicode源文件在字符之間添加空格(實際上是空字節)

lines = InFile.readlines() 
OutFile.writelines(lines[3:]) 

它正在工作,但(我相信)由於編碼問題在輸出文件中的每個字符之間添加一個空格。結果的 例子:

2 0 1 3 - 1 2 - 2 3 ; ; 3 6 0 . 3 7 
2 0 1 3 - 1 2 - 2 4 ; ; 0 . 0 0 

行的源文件中:

2013-12-23;;360.37 
2013-12-24;;0.00 

如果我保存的txt源文件爲ANSI運行腳本之前,我收到正確的結果。但是,由於源文件是由另一個軟件以Unicode自動發送的,因此每次手動更改都不切實際。我閱讀了很多其他編碼/編碼/解碼問題。但我完全失去了,不知道我該如何解決這個問題。哪個是正確的命令?腳本中的哪個位置?或者我完全錯了,它與編碼問題沒有任何關係?

+2

'OutFile'是如何打開的?你使用的是什麼版本的Python,以及如何閱讀文件以查看字符之間的「空格」? –

+2

文件永遠不是「Unicode」 - 它可以使用各種可以解碼爲Unicode字符串的編碼(如UTF-8,UTF-16-LE,UTF-16-BE,UTF-32等) ,但文件本身由簡單的字節組成。 –

+1

我懷疑OP被某些微軟產品誤導,這些微軟產品提供諸如「另存爲Unicode」之類的選項。正如我們在這裏看到的那樣使用UTF-16-LE。這並不是說你錯了。 –

回答

7

我相當肯定你的輸入文件是UTF-16編碼的,你看到的空格實際上是空字節。

嘗試

with open("myfile.txt", "r", encoding="utf-16") as infile: 
    lines = infile.readlines() 

,看看問題是否仍然存在。

+0

你說得對,它似乎是UTF-16。我嘗試了您的建議,但無法完成工作。可能我犯了一個錯誤。但是,我瀏覽了其他選項的視圖,它可以很好地工作:'InFile = codecs.open(sys.argv [1],「r」,「utf-16」)'對於像我這樣的初學者:別忘了在開始時包括'import codecs'。謝謝你的幫助。保存了我的一天。 – user3037270

+0

@ user3037270,不要忘記接受這個答案,因爲你的一天被保存。 :) – bzlm

相關問題