2012-09-04 24 views
0

嗨,我寫劇本prasing從網絡文本和我otput文件必須在非ISO擴展ASCII文本,以CRLF,LF行結束 如何我可以寫文件,因爲這代碼頁?蟒蛇拉丁文2到非ISO擴展ASCII文本

def save_file(potoczek, nazwapliku): 
    file = open(nazwapliku,"w") 
    file.write(potoczek) 
    file.close() 
     return() 
#... 
t1='"'+tab[0]+'\"\n'+naglowek+wykli(zawartosc0).encode('latin2') 
t2='"'+tab[1]+'\"\n'+naglowek+wykli(zawartosc1).encode('latin2') 
t3='"'+tab[2]+'\"\n'+naglowek+wykli(zawartosc2).encode('latin2') 
t4='"'+tab[3]+'\"\n'+naglowek+wykli(zawartosc3).encode('latin2') 

TRAKTOR = t1+t2+t3+t4 

print udata 
save_file(TRAKTOR,PLIK_SCIEZKA) 
+0

「非ISO擴展ASCII」並未真正指定任何特定的編碼。你什麼意思? 「拉丁文2」 是[ISO-8859-2](http://en.wikipedia.org/wiki/ISO_8859-2),所以它絕對不是 「非ISO」 的別名。 –

+0

舊文件簽入命令'文件'bash控制檯: 'file〜/ stare_ceny/jacek/stare_ceny/2012-07-02.csv /home/jacek/stare_ceny/2012-07-02.csv:非ISO擴展-ascii文字,用CRLF,LF線terminators' 拉丁2是ISO-8859-2 新文件別名 ' 亞切克@ R2D2:〜/ skrypty $文件/ var/usterki/ceny_2012-09-04_08-11 -46.csv /var/usterki/ceny_2012-09-04_08-11-46.csv:UTF-8 Unicode文本 ' – Dzaczek

回答

1

這種情況下的一般規則是「在內部使用Unicode;在I/O邊界進行編碼」 - 您也可以輕鬆地將該理念擴展到行尾。

import io # for Python 2.6+; not needed in Python 3 

def save_file(potoczek, nazwapliku): # data, filename 
    file = io.open(nazwapliku, mode="w", newline="\r\n") # in Python 3, just "open" 
    file.write(potoczek.encode('latin2')) 
    file.close() 
    return() 

然後,只需建立數據定期unicode字符串,通過標準換行符(\n)分離,SAVE_FILE功能將採取必要的翻譯服務。

+0

我有這個inforamtin:/ 'Traceback(最近呼叫最後一個): 文件「skrypt py」爲,線182,在 SAVE_FILE(UDATA,PLIK_SCIEZKA) 文件 「skrypt.py」,線路108,在SAVE_FILE file.write(potoczek.encode( '拉丁文2')) 文件 「/usr/lib/python2.6/encodings/iso8859_2.py」,第12行中編碼 返回codecs.charmap_encode(input,errors,encoding_table) UnicodeDecodeError:'ascii'編解碼器無法解碼位置98中的字節0xc5:序號不在範圍內(128) ' – Dzaczek

+0

我添加了\ R是beter:D – Dzaczek