通过unicode字符拆分从文件读取的unicode字符串

时间:2015-02-16 09:12:47

标签: python regex unicode split

我正在尝试用unicode字符拆分unicode字符串:'。' (U + 0964)

unicode字符串的一个例子是:

তার মধ্যে আশ্চর্য একটা মিল। ইস্টার্ন মেট্রোপলিটান বাইপাস। এ বার দিন এল। বদলে গিয়েছে অনেকটাই।

如果我从文件中读取它,

f1 = codecs.open('tmp1.txt',encoding='utf8',mode='r')
data = f1.read()
splitdata = re.split('।',data)
for apart in splitdata :
    print apart

然后字符串不会被拆分。这是输出:

তার মধ্যে আশ্চর্য একটা মিল। ইস্টার্ন মেট্রোপলিটান বাইপাস। এ বার দিন এল। বদলে গিয়েছে অনেকটাই।

但是,如果我直接将字符串放入变量然后拆分它:

string_var = 'তার মধ্যে আশ্চর্য একটা মিল। ইস্টার্ন মেট্রোপলিটান বাইপাস। এ বার দিন এল। বদলে গিয়েছে অনেকটাই।'
splitstring = re.split('।',string_var)
for apart in splitstring :
    print apart

然后它有效。输出:

তার মধ্যে আশ্চর্য একটা মিল
 ইস্টার্ন মেট্রোপলিটান বাইপাস
 এ বার দিন এল
 বদলে গিয়েছে অনেকটাই

我注意到的一件事是,如果我打印分割函数返回的值,我会看到两个不同的输出。

这是从拆分文件中读取的数据:

print splitdata
[u'\u09a4\u09be\u09b0 \u09ae\u09a7\u09cd\u09af\u09c7 \u0986\u09b6\u09cd\u099a\u09b0\u09cd\u09af \u098f\u0995\u099f\u09be \u09ae\u09bf\u09b2\u0964 \u0987\u09b8\u09cd\u099f\u09be\u09b0\u09cd\u09a8 \u09ae\u09c7\u099f\u09cd\u09b0\u09cb\u09aa\u09b2\u09bf\u099f\u09be\u09a8 \u09ac\u09be\u0987\u09aa\u09be\u09b8\u0964 \u098f \u09ac\u09be\u09b0 \u09a6\u09bf\u09a8 \u098f\u09b2\u0964 \u09ac\u09a6\u09b2\u09c7 \u0997\u09bf\u09df\u09c7\u099b\u09c7 \u0985\u09a8\u09c7\u0995\u099f\u09be\u0987\u0964\n']

这是字符串拆分:

print splitstring
['\xe0\xa6\xa4\xe0\xa6\xbe\xe0\xa6\xb0 \xe0\xa6\xae\xe0\xa6\xa7\xe0\xa7\x8d\xe0\xa6\xaf\xe0\xa7\x87 \xe0\xa6\x86\xe0\xa6\xb6\xe0\xa7\x8d\xe0\xa6\x9a\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xaf \xe0\xa6\x8f\xe0\xa6\x95\xe0\xa6\x9f\xe0\xa6\xbe \xe0\xa6\xae\xe0\xa6\xbf\xe0\xa6\xb2',
 ' \xe0\xa6\x87\xe0\xa6\xb8\xe0\xa7\x8d\xe0\xa6\x9f\xe0\xa6\xbe\xe0\xa6\xb0\xe0\xa7\x8d\xe0\xa6\xa8 \xe0\xa6\xae\xe0\xa7\x87\xe0\xa6\x9f\xe0\xa7\x8d\xe0\xa6\xb0\xe0\xa7\x8b\xe0\xa6\xaa\xe0\xa6\xb2\xe0\xa6\xbf\xe0\xa6\x9f\xe0\xa6\xbe\xe0\xa6\xa8 \xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\x87\xe0\xa6\xaa\xe0\xa6\xbe\xe0\xa6\xb8',
 ' \xe0\xa6\x8f \xe0\xa6\xac\xe0\xa6\xbe\xe0\xa6\xb0 \xe0\xa6\xa6\xe0\xa6\xbf\xe0\xa6\xa8 \xe0\xa6\x8f\xe0\xa6\xb2',
 ' \xe0\xa6\xac\xe0\xa6\xa6\xe0\xa6\xb2\xe0\xa7\x87 \xe0\xa6\x97\xe0\xa6\xbf\xe0\xa7\x9f\xe0\xa7\x87\xe0\xa6\x9b\xe0\xa7\x87 \xe0\xa6\x85\xe0\xa6\xa8\xe0\xa7\x87\xe0\xa6\x95\xe0\xa6\x9f\xe0\xa6\xbe\xe0\xa6\x87',
 '']

这里似乎有两种不同的编码,split正在处理字符串的编码,但是当从文件中读取字符串时,它不适用于编码。从文件中读取时是否需要更改编码才能使其正常工作?

1 个答案:

答案 0 :(得分:0)

您需要使用

re.split(u'।',data)

data.split(u'।')
因为您使用Unicode,所以

u是必需的。