我使用正则表达式删除文本文件中的所有撇号。我需要在utf-8中对其进行编码,以便我的其他功能正常工作。所以,当我尝试这个时:
import re
import codecs
dataset=[]
with codecs.open(sys.argv[1], 'r', 'utf8') as fil:
for line in fil:
lines=[re.sub("'","",line) for line in fil]
print(lines)
dataset.append(lines.lower().strip().split())
输出:
[] #on printing lines
Traceback (most recent call last):
File "preproc.py", line 112, in <module>
dataset.append(lines.lower().strip().split())
AttributeError: 'list' object has no attribute 'lower'
Textfile包含如下字符串:It's an amazing day she's said
它在印刷线上将同样的东西还给我。
答案 0 :(得分:1)
所以在SO聊天会议之后,问题就是这个。给定一个单词列表列表,如何替换unicode撇号并维护原始数据结构。
根据此数据结构,删除\u2019
unicode字符
s = [[u'wasn\u2019t', u'right', u'part', u'say', u'things',
u'she\u2019s', u'hurt', u'terribly', u'she\u2019s',
u'speaking']]
以下是如何执行此操作的一个实例:
quotes_to_remove = [u"'", u"\u2019", u"\u2018"]
new_s = []
for line in s:
new_line = []
for word in line:
for quote in quotes_to_remove:
word = word.replace(quote, "")
new_line.append(word)
new_s.append(new_line)
print(new_s)
产生
[[u'wasnt', u'right', u'part', u'say', u'things', u'shes',
u'hurt', u'terribly', u'shes', u'speaking']]
另外值得注意的是,提问者正在使用python 2.7.10,并且在这个答案中提供的代码未在python 3上进行测试。
答案 1 :(得分:1)
我认为它可以像这样工作:
import re
import codecs
with codecs.open("textfile.txt", "r", "utf-8") as f:
for i, line in enumerate(f):
f[i] = re.sub("'","",line)
print(line)
原始方法不会成功为列表f赋值。 我为你做了两个简单的实验。
1
list1 = [2,3,5,4,1,1,1,2,2,5,1]
for num in list1:
num = 1
print(list1)
输出:[2,3,5,4,1,1,1,2,2,5,1]
2
list1 = [2,3,5,4,1,1,1,2,2,5,1]
for i, num in enumerate(list1):
list1[i] = 1
print(list1)
输出:[1,1,1,1,1,1,1,1,1,1,1]
这就是为什么你的结果是错误的。这不是正则表达式的问题!希望能帮助到你。 :)