如何仅从此列表中过滤掉带有哈希标记的单词并输出到文本文件?

时间:2017-11-18 17:30:51

标签: python python-2.7

我的输入文件包含以下列表存储为txt文件

[(u'#Brexit', 823), (u'#brexit', 166), (u'#Brexitchaos', 135), (u'#StopBrexit', 63), (u'#EU', 46), (u'#BREXIT', 29), (u'#DavidDavis', 28), (u'#UK', 21), (u'#Remain', 20), (u'#BrexitReports', 17)]

我想将散列标记的单词过滤掉到新的txt文件中。

我的预期输出为: Output.txt

Brexit
brexit
Brexitchaos
StopBrexit
EU
BREXIT
DavidDavis
UK
Remain
BrexitReports

3 个答案:

答案 0 :(得分:0)

假设元组中的所有第一项都是哈希标记,您可以这样做:

data = [(u'#Brexit', 823), ..., (u'#BrexitReports', 17)]
with open('Output.txt') as f:
    for word, i in data:
        # if word.startswith('#')  # if there are non-hashtagged words
        f.write(word.lstrip('#') + '\n')

答案 1 :(得分:0)

你可以试试这个:

import ast
data = ast.literal_eval(open('filename.txt').read())
f = open('new_data.txt', 'w')
for a, b in data:
   if a.startswith('#'):
       f.write(a[1:]+'\n')

f.close()

答案 2 :(得分:0)

你可以写一个正则表达式。在这种情况下"(?<=#)[^']+",这意味着as many characters as possible, after a '#' and until '

>>> import re
>>> text = "[(u'#Brexit', 823), (u'#brexit', 166), (u'#Brexitchaos', 135), (u'#StopBrexit', 63), (u'#EU', 46), (u'#BREXIT', 29), (u'#DavidDavis', 28), (u'#UK', 21), (u'#Remain', 20), (u'#BrexitReports', 17)]"
>>> re.findall("(?<=#)[^']+", text)
['Brexit', 'brexit', 'Brexitchaos', 'StopBrexit', 'EU', 'BREXIT', 'DavidDavis', 'UK', 'Remain', 'BrexitReports']

您只需要在字符串中读取整个文件,并将列表作为行写入新文件中。