Python 提取长度为>;=10万字中的4个

Python 提取长度为>;=10万字中的4个,python,Python,我有一个文件,一行大约10万字,都在一行 如何以最快、最有效的方式仅提取长度大于或等于4的单词 我考虑过使用regex来实现这一点,但我不确定这是否是最好的方法。列表理解会很好: [word for word in line.split() if len(word) >= 4] 它们是分开的吗?您可以使用分隔符设置为空格的csv读取器,然后在len()>=4的位置循环它 最好使用来自的自定义换行文件迭代器,并将换行设置为“”。(您可以按照fileLineIter()的代码链接进行操作)

我有一个文件,一行大约10万字,都在一行

如何以最快、最有效的方式仅提取长度大于或等于4的单词


我考虑过使用regex来实现这一点,但我不确定这是否是最好的方法。

列表理解会很好:

[word for word in line.split() if len(word) >= 4]

它们是分开的吗?您可以使用分隔符设置为空格的csv读取器,然后在len()>=4的位置循环它

最好使用来自的自定义换行文件迭代器,并将换行设置为“”。(您可以按照
fileLineIter()
的代码链接进行操作)


您可以在
mmap
'd文件上使用
re
,例如:

import mmap, re

with open('somefile') as fin:
    mf = mmap.mmap(fin.fileno(), 0, access=mmap.ACCESS_READ)
    words = re.findall('\w{4,}', mf)

文件是如何分隔的?文件是一行,单词按字母顺序隔开。例如:
aaaab abass…
@joachimisaksson不应该是“where”be“if”?如果有标点符号,你应该添加:import string exclude=set(string.标点符号)line=''。join(ch表示ch-in-line,如果ch-not-in-exclude)这比
[word-for-word-in-line.split(),如果len(word)>=4]更有效吗?它们具有相同的输出。使用正则表达式会比
len()
快吗?@Liondancer您必须
timeit
它们。。。他们在引擎盖下面发生的事情上有稍微不同的行为。。。我怀疑列表comp可能更快,但regex/mmap方法更灵活。。。
import mmap, re

with open('somefile') as fin:
    mf = mmap.mmap(fin.fileno(), 0, access=mmap.ACCESS_READ)
    words = re.findall('\w{4,}', mf)