使用python从txt文件中提取单词

Posted

技术标签:

【中文标题】使用python从txt文件中提取单词【英文标题】:Extracting words from txt file using python 【发布时间】:2013-06-23 19:29:53 【问题描述】:

我想从文本文件中提取单引号之间的所有单词。文本文件如下所示:

u'MMA': 10,
=u'acrylic'= : 19,
== u'acting lessons': 2,
=u'aerobic': 141,
=u'alto': 2= 4,
=u&#= 39;art therapy': 4,
=u'ballet': 939,
=u'ballroom'= ;: 234,
= =u'banjo': 38,

理想情况下,我的输出应该是这样的:

MMA,
acrylic,
acting lessons,
...

从浏览帖子看来,我应该使用 NLTK / regex for python 的某种组合来完成此操作。我尝试了以下方法:

import re

file = open('artsplus_categories.txt', 'r').readlines()

for line in file:
    list = re.search('^''$', file)

file.close()

并得到以下错误:

  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 142, in search
    return _compile(pattern, flags).search(string)
TypeError: expected string or buffer

我认为错误可能是由我寻找模式的方式引起的。我的逻辑是我搜索“....”中的所有内容。

re.py 出了什么问题?

谢谢!

--------------------------------

根据阿什维尼的评论:

import re

file = open('artsplus_categories.txt', 'r').readlines()

for line in file:
    list = re.search('^''$', line)

print list

#file.close()

但是输出什么都没有:

Samuel-Finegolds-MacBook-Pro:~ samuelfinegold$ /var/folders/jv/9_sy0bn10mbdft1bk9t14qz40000gn/T/Cleanup\ At\ Startup/artsplus_categories_clean-393952531.278.py.command ; exit;
None
logout


@Rasco:这是我得到的错误:

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 177, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
logout

我正在使用此代码:

file2 = open('artsplus_categories.txt', 'r').readlines()
list = re.findall("'[^']*'", file2)
for x in list:
    print (x)

【问题讨论】:

阅读错误,这是 re.py 中的第 142 行,而不是您的文本文件。 我将编辑问题。感谢您指出这一点。 【参考方案1】:

您实际上没有将line 传递给正则表达式,而是将整个列表(文件)传递给它。您应该将line 传递给re.search 而不是file

for line in file:
    lis = re.search('^''$', line) # line not file

不要使用listfile 作为变量名。它们是内置函数。

更新:

with open('artsplus_categories.txt') as f:
    for line in f:
        print re.search(r"'(.*)'", line).group(1)
...         
MMA
acrylic
acting lessons
aerobic
alto
art therapy
ballet
ballroom
banjo

【讨论】:

我明白了!谢谢你的收获。我现在正在尝试修改代码以获取单词列表,但是当我使用您的编辑运行代码时,我的列表是空的。 @goldisfine 相反,如果打印file,您正在打印listfile 列表不为空。而且您的正则表达式也不正确。 @goldisfine 试试我更新的代码。而=u&#= 39;art therapy': 4, 行似乎缺少开场白。你想打印那行吗?【参考方案2】:

试试这个代码示例:

import re

file =  """u'MMA': 10,
        =u'acrylic'= : 19,
        == u'acting lessons': 2,
        =u'aerobic': 141,
        =u'alto': 2= 4,
        =u&#= 39;art therapy': 4,
        =u'ballet': 939,
        =u'ballroom'= ;: 234,
        = =u'banjo': 38,"""

list = re.findall("'[^']*'", file)
for x in list:
    print (x)

它显示了正确的值。请记住,您的示例中的值之一没有正确打开引号,因此匹配项在那里被破坏。

【讨论】:

嗯...我试过 import re 'file = open('artsplus_categories.txt', 'r').readlines() list = re.findall("'[^']*'" ,文件)打印列表',这导致了这个:'文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py”,第177行,在findall中返回_compile(pattern , flags).findall(string) TypeError: expected string or buffer' 抱歉,使用了 Python 语法(而不是 Python 3)。现在应该没问题(修复了print(x) 行)。 我无法按照您刚刚输入的代码进行操作。请把它放在问题中,以便我能正确看到它:)

以上是关于使用python从txt文件中提取单词的主要内容,如果未能解决你的问题,请参考以下文章

提取 .txt 文件中两个关键字之间的所有单词

用 Python 解析文本文件?! txt单词的独特模式

Python提取包含单词的句子

Python:计算txt文件目录中的单词并将单词计数写入单独的txt文件

如何用python统计一个txt文件中各个单词出现的次数

从python文件中删除文本文件中的停用词