为什么不重新处理我的文件?

时间:2016-03-02 03:32:01

标签: python regex

我使用正则表达式删除文本文件中的所有撇号。我需要在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 它在印刷线上将同样的东西还给我。

2 个答案:

答案 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]

这就是为什么你的结果是错误的。这不是正则表达式的问题!希望能帮助到你。 :)

相关问题