我如何在 Python (2.72) 上打开一个文本文件中的行

Posted

技术标签:

【中文标题】我如何在 Python (2.72) 上打开一个文本文件中的行【英文标题】:how do i go over lines in an open text file on Python (2.72) 【发布时间】:2012-01-06 08:53:10 【问题描述】:

我有包含几千个单词的文本文件(一行一个单词)。 我写了一个函数,它接受两个单词(字符串),并检查一个 word 是另一个词的 Anagram(这意味着如果两个词包含相同的 字母,即使顺序不同)。

现在我想查看我的巨大文本文件并搜索字谜。我的输出应该是一个列表,其中包含几个单词的元组 是字谜。

问题是我不知道如何使用 for/while 循环遍历单词。我尝试过的一切都失败了。 (我很清楚这样做的方式,但我对python还不够了解)。

编辑#1: 假设我想遍历文本中的第 1 到 100 行而不是整个文本,我该怎么做?

【问题讨论】:

【参考方案1】:
file = 'file.txt'
with open(file, 'r') as f:
    for line in f:
        pass

【讨论】:

【参考方案2】:

readlines 为您提供文件中所有单词的列表:

text = open("myfile.txt")
wordlist = text.readlines()

现在你只需要执行 for 循环:

for item in wordlist:
    anagramfunction()...

【讨论】:

你可以做for line in text 好吧,这已经开始帮助我了。但是我如何摆脱每个单词末尾的 2\n 呢?【参考方案3】:

    将所有单词(行)加载到列表中,而单词位于单独的行中,这可以通过readlines() 完成(您必须使用strip() 删除行尾):

    words = [s.strip() for s in f.readlines()]

    为每个单词创建字谜

    对该字谜使用单词列表in 运算符来检查字谜是否存在 如果存在则打印

【讨论】:

【参考方案4】:

我假设您的单词列表没有那么大,它不适合 RAM。这是一个(未优化的)算法,可以构建字谜列表(使用先前答案的位):

def buildAnagramsList(word, wordList):
    anagramsList = []
    for word2 in wordList:
        if areAnagrams(word, word2): #you already have a similar method
            list.remove(word2) # Spare some time here by not looking twice for the same anagrams
            anagramsList.append(word2)
    return anagramsList

file = open("myfile.txt")
words = [s.strip() for s in file.readlines()]
anagramsLists = [buildAnagramsList(word, words) for word in words]

【讨论】:

【参考方案5】:

Python Tutorial 已覆盖:

另一种读取行的方法是遍历文件 目的。这是内存效率高、速度快、代码更简单的方法:

for line in f:
    print line,

您可以使用itertools.combinations获取所有单词组合:

with open("file.txt") as word_list:
    for (word1, word2) in itertools.combinations(word_list, 2):
        if anagram(word1, word2):
            # do stuff

【讨论】:

我需要给我的函数两个词(字符串)。这意味着我需要给它当前的单词,下一行的单词,然后在第三行等等......之后我需要给我的函数在第二行的单词第三行上的单词,而不是第四行中的单词等等……我没有成功。有什么想法吗?【参考方案6】:

我会选择这样的:

wordList = []
anagrams = []

file = StringIO.StringIO(open("file.txt","rb"),dialect=csv.excel) //Using csv.excel as each word is on a different line, so hoping this should work but Im not entirely sure
wordList.extend(wordList)

Wordlist 现在应该类似于 [Word1, Word2, Word3]

for i in xrange(wordList):
    if wordList[i] == wordList[i+1]://Code to analyse anagrams here
        anagrams.append(wordList[i])

我真的不确定这种语法,我让你知道我会做什么。虽然有人可能会否决这个答案,因为它不在我的脑海中,你必须阻止它抛出 OutOfBounds 错误,但我没有太多时间来写它! :P

【讨论】:

以上是关于我如何在 Python (2.72) 上打开一个文本文件中的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 FreeBSD 10.1 上增加每个进程的打开文件数限制?

如何在多版本anaconda python环境下转换spyder

Mac系统上如何添加文本文档

区块链 fisco bcos 2.72 在多机器上部署多个docker节点 ubuntu

如何创建python文件

ImportError:Mac 上没有名为 bs4 的模块