pythonでcodecでopenすると。。
pythonでcp932のファイルを開いて、cp932の文字列のバイト指定で部分を取り出したかった。
windowsで作られたファイルの、6byteから12byteまでを取り出したいとき、とか。
import codecs def fileread(file): fread = codecs.open(file, "r", "cp932") fwrite= codecs.open("output_file.txt", "w", "cp932") for line in fread: # さて、cp932指定で開いたファイルの行はstr? unicode? fwrite.write(line[6:12]) fread.close() fwrite.close()
これだと、うまく行かない。
codecs.openで、cp932を指定して開いたから、文字列はcp932なstrで取れるだろうと思い込んでいたが、lineで取れる文字はunicodeだから、6文字目から12文字目が取れる。
(ここで、ハマった)
俺がやりたかったのは、cp932(ほぼShift_JIS)で数えて、6byte目から、12byte目の部分文字列を取り出したい。
import codecs def fileread(file): fread = codecs.open(file, "r", "cp932") fwrite= codecs.open("output_file.txt", "w", "cp932") for line in fread: # line(unicode)をcp932のstrへ型変換すると[x:y]がbyte指定で取り出せる cp932_line = line.encode("cp932") # writeに渡す時は、decodeでunicodeに型変換する必要がある fwrite.write(cp932_line[6:12].decode("cp932")) fread.close() fwrite.close()
これだと改行も無いので実際にはもう少し考えることは多いと思うけど