如何为string.punctuation添加更多标点符号

时间:2015-09-02 00:11:22

标签: python regex string

print string.punctuation看起来像这样:

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

我想知道我们是否可以添加更多标点符号,例如看起来像这样的中文全文:“。”

我想做的是:

# -*- coding: utf-8 -*-

exclude = string.punctuation.decode("ascii") + u"。"
c = codecs.open("my_file.csv", "w", "utf-8")
my_string = "你好, 天气很好。"
#print my_string.encode('utf-8').translate({ord(p): None for p in exclude})
print >> c, my_string.encode('utf-8').translate({ord(p): None for p in exclude})
desired output: "你好, 天气很好"

print >> c, my_string.encode('utf-8').translate({ord(p): None for p in exclude})会出错:

TypeError:期望一个字符缓冲区对象

1 个答案:

答案 0 :(得分:1)

您可以添加额外的标点字符,但如果您正在处理中文文本,您可能希望使用Unicode而不是8位字符。 string.puctuation中的标点符号都是ASCII,因此要将其作为unicode字符串使用,您需要对其进行解码:

exclude = string.punctuation.decode("ascii") + u"。"
my_string = u"你好, 天气很好。"
print my_string.translate({ord(p): None for p in exclude})

请注意,我必须以不同的方式进行translate调用,因为unicode.translate采用的参数与str.translate不同。一个参数是从Unicode序数(整数)到字符,序数或(在本例中使用)None(从输出中删除字符)的字典映射。

如果您要在源代码中包含Unicode字符串文字(例如"。"字符串),则需要确保您具有适当的编码declared at the top of your file评论:

# -*- coding: utf8 -*-

(或者您在编辑器中使用的任何实际编码。)