Python有关字符集,以及文件读写处理上的几个问题

Python有关字符集,以及文件读写处理上的几个问题

小弟初学Python,自行编写的程序有几处不明之处还望各位多多赐教:

# -*- coding: cp936 -*-
from re import *

encodeTable=open('Shift-JIS-A.txt','rU')
ectDict={}
for eachLine in encodeTable:
    n=search('=',eachLine)
    if n is not None:
        tmp=split('=',eachLine)
        print tmp[1]
        ectDict[tmp[0]]=tmp[1]
encodeTable.close()


Shift-JIS-A.txt的数据结构(ANSI编码,部分):
829F=ぁ
82A0=あ
82A1=ぃ
82A2=い
82A3=ぅ
82A4=う
82A5=ぇ
82A6=え
82A7=ぉ
82A8=お
82A9=か
82AA=が
82AB=き
82AC=ぎ
82AD=く
82AE=ぐ
82AF=け
82B0=げ
82B1=こ
82B2=ご
82B3=さ
82B4=ざ
82B5=し
82B6=じ
82B7=す
82B8=ず
82B9=せ
82BA=ぜ
82BB=そ
82C5=で
82C6=と
82C7=ど

8740=①
8741=②
8742=③
8743=④
8744=⑤
8745=⑥
8746=⑦
8747=⑧
8748=⑨

889F=亜
88A0=唖
88A1=娃
88A2=阿
88A3=哀
88A4=愛
88A5=挨
88A6=姶
88A7=逢
88A8=葵
88A9=茜
88AA=穐
88AB=悪
88AC=握
88AD=渥
88AE=旭
88AF=葦
88C3=暗
88C4=案
88C5=闇

问题
1.插入ectDict后,值无法正确显示,例如Shell中ectDict['829F']的结果是'\xa4\xa1\n',ectDict['889F']的结果是'\x81\x84\n',不是原本字符(print正常),小弟明白这大约与字符集设定有关,不过不知其具体存储原理?
2.值末尾的换行符\n有无简易方法(不使用正则)在读取文件时去除?
3.如何以二进制“值”形式读写文件?即希望每一次读取的都是一个字节长度的数据然后存入变量,google一下得知似乎应该使用struck或者pack,但细节较少,不知应当如何操作?
4.在Windows下读取notepad中使用'Unicode'编码保存的文本文件,发觉无法解析其字符集,但'utf-8'就可以(而且似乎是自动完成),utf-8本身不即是Unicode的一种存储方式么?为何会有如此差别?

希望各位前辈多多赐教,小弟不胜感激!
问题
1.插入ectDict后,值无法正确显示,例如Shell中ectDict['829F']的结果是'\xa4\xa1\n',ectDict['889F']的结果是'\x81\x84\n',不是原本字符(print正常),小弟明白这大约与字符集设定有关,不过不知其具体存储原理?

"不是原本字符(print正常)"
默认你采用GBK读取的数据,存储本来就是2个字符(\xa4\xa1)这样的字符; print,使用的本地字符编码,当然是print '\xa4\xa1' 就是正确的字符了.  除非你指定了Unicode字符.

2.值末尾的换行符\n有无简易方法(不使用正则)在读取文件时去除?
line= line[:-1]

3.如何以二进制“值”形式读写文件?即希望每一次读取的都是一个字节长度的数据然后存入变量,google一下得知似乎应该使用struck或者pack,但细节较少,不知应当如何操作?
这个不了解,pack的应该是一种方式; 看看Doc吧.

4.在Windows下读取notepad中使用'Unicode'编码保存的文本文件,发觉无法解析其字符集,但'utf-8'就可以(而且似乎是自动完成),utf-8本身不即是Unicode的一种存储方式么?为何会有如此差别?

utf-8保存的对于英文字符等单字符语言,是不会发生变化的,看看UTF-8规则就了解了,双字符的是出现问题的.
UTF-8是Unicode的一种表示方式;

发觉无法解析其字符集 ,需要进行Ansi到Unicode解码,才行;
对于问题2,如果是多行长字符串,不想读到每行的 "\n"的话可以采用 "something".replace("\n","")的方法
对于问题3,不是可以指定每次读取的长度么,指定一个字节的长度就可以了吧。struck里面的unpack和pack也是指定了读取长度的。
问题4我也不大懂,学习一下楼上的解释
期待楼下高手指点