python 2の符号化問題(split処理ファイルが深いため)
4094 ワード
甲魚ちゃんとカスタマーサービスでおしゃべりpython 2.7バージョン、その中にif role==“小さい甲の魚”があって、ifに入ることができなくて、しかしまた間違いを報告していないで、符号化の問題で、両者は比較していないのでif文に入ることができません
コーディングの問題:
python 2では、符号化の問題があります.一般的にunicodeという中間コードがありますが、記憶がもったいないので符号化して記憶する必要はありません.中間量として使うので、比較しやすいなどです.
一方utf 8とgbkはいずれもUnicodeベースの符号化であり、中国語をサポートしている(符号化されていない)ので、decode(’テキスト対応符号化’)で復号し、Unicodeフォーマットにすることができる
対応するunicodeは、encode(’所望の符号化フォーマット’)によって、utf 8およびgbkなどの対応する符号化フォーマットに変更することができる.
pyファイルが前に明示的に符号化されると、コードの中の未明示的な符号化はすべてこのデフォルトの符号化フォーマットであり、例えばヘッダにutf 8の明示があれば、中の文字列のデフォルトはutf 8の符号化である.
!!普通はコードの中ですべての文字をunicodeコードのフォーマットに変えて、文字列の処理を便利にして、しかし出力する時、相応の符号化に転化することを忘れないでください
pyファイルヘッダの前に符号化がなければ、中のデフォルトはasciiコードで、asciiコードは主に英語といくつかの記号の対応コードで、中国語がないので中国語を表示できません
chardetビューをロードできます.あるコンテンツに対応する符号化により、import chardetの復号が容易になります.
IO時の符号化問題txtがtxtファイルを読み出す場合、txtファイルがANSI符号であれば、gbk符号として読み込まれ、gbkで復号することができる.txtファイルがutf-8符号化である場合、読み込まれたものもutf-8符号化である.一方、txtがunicodeである場合、読み込まれたテキスト符号化が「utf-16」になる奇妙な現象を発見するので、utf-16で復号する必要がある.
#
def save(boy, girl, count):
file_name_boy = 'boy_' +str(count)+'.txt'
file_name_girl = 'girl' +str(count)+'.txt'
# ,
with open(file_name_boy, 'w') as boy_file:
boy_file.writelines(boy)
with open(file_name_boy, 'w') as girl_file:
girl_file.writelines(girl)
#
def split_file(file_name):
with open(file_name) as txt:
boy = []
girl = []
count = 1
a = 0
for each_line in txt:
if each_line[0:6] != '======':
#split: : role,
(role, line_spoken) = each_line.split(':', 1)
if role.decode('gbk') == u' ': # , txt gbk , utf-8
boy.append(line_spoken) # , unicode ,gbk unicode ,
# u unicode
if role.decode('gbk') == u' ':
girl.append(line_spoken)
else:
save(boy, girl, count)
count+=1
#
split_file('record.txt')
コーディングの問題:
python 2では、符号化の問題があります.一般的にunicodeという中間コードがありますが、記憶がもったいないので符号化して記憶する必要はありません.中間量として使うので、比較しやすいなどです.
一方utf 8とgbkはいずれもUnicodeベースの符号化であり、中国語をサポートしている(符号化されていない)ので、decode(’テキスト対応符号化’)で復号し、Unicodeフォーマットにすることができる
対応するunicodeは、encode(’所望の符号化フォーマット’)によって、utf 8およびgbkなどの対応する符号化フォーマットに変更することができる.
pyファイルが前に明示的に符号化されると、コードの中の未明示的な符号化はすべてこのデフォルトの符号化フォーマットであり、例えばヘッダにutf 8の明示があれば、中の文字列のデフォルトはutf 8の符号化である.
!!普通はコードの中ですべての文字をunicodeコードのフォーマットに変えて、文字列の処理を便利にして、しかし出力する時、相応の符号化に転化することを忘れないでください
pyファイルヘッダの前に符号化がなければ、中のデフォルトはasciiコードで、asciiコードは主に英語といくつかの記号の対応コードで、中国語がないので中国語を表示できません
chardetビューをロードできます.あるコンテンツに対応する符号化により、import chardetの復号が容易になります.
str = "xxxxx"
str_type = chardet.detect(str)
code = str_type['encoding']
IO時の符号化問題txtがtxtファイルを読み出す場合、txtファイルがANSI符号であれば、gbk符号として読み込まれ、gbkで復号することができる.txtファイルがutf-8符号化である場合、読み込まれたものもutf-8符号化である.一方、txtがunicodeである場合、読み込まれたテキスト符号化が「utf-16」になる奇妙な現象を発見するので、utf-16で復号する必要がある.