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:期望一个字符缓冲区对象
答案 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 -*-
(或者您在编辑器中使用的任何实际编码。)