尝试使用Python计算文件中的单词

时间:2015-11-04 18:28:13

标签: python file

我正在尝试计算难以理解的单词的数量'在一个文件中,这需要我计算每个单词中的字母数。现在,我只想从一个文件中一次一个地获取单个单词。我写了以下内容:

file = open('infile.txt', 'r+')
fileinput = file.read()

for line in fileinput:
    for word in line.split():
        print(word)

输出:

t
h
e

o
r
i
g
i
n

.
.
.

似乎一次打印一个字符而不是一次打印一个字。我真的很想知道这里发生了什么。有什么建议吗?

3 个答案:

答案 0 :(得分:6)

使用splitlines()

fopen = open('infile.txt', 'r+')
fileinput = fopen.read()

for line in fileinput.splitlines():
    for word in line.split():
        print(word)

fopen.close()

没有splitlines()

您还可以使用 with 语句打开该文件。它会自动关闭文件:

with open('infile.txt', 'r+') as fopen:
    for line in fopen:
        for word in line.split():
            print(word)

答案 1 :(得分:3)

一个文件支持迭代协议,对于较大的文件,它比一次性读取内存中的整个内容要好得多

with open('infile.txt', 'r+') as f:
    for line in f:
        for word in line.split():
            print(word)

假设您要定义过滤器功能,您可以沿着

行执行某些操作
def is_difficult(word):
    return len(word)>5

with open('infile.txt', 'r+') as f:
    words = (w for line in f for w in line.split() if is_difficult(w))
    for w in words:
        print(w)

,输入文件为

ciao come va
oggi meglio di domani
ieri peggio di oggi

产生

meglio
domani
peggio

答案 2 :(得分:0)

您的代码为您提供单个字符,因为您调用.read()将所有内容存储为单个字符串,因此当您for line in fileinput通过char迭代字符串char时,没有充分的理由使用读取和分割线,您可以简单地遍历文件对象,如果您确实需要一个可以调用readlines的行列表。

如果你想按长度分组单词,使用单词长度作为键的dict,你还需要删除str.strip中你可以用的单词中的标点:

def words(n, fle):
    from collections import defaultdict
    d = defaultdict(list)
    from string import punctuation
    with open(fle) as f:
        for line in f:
            for word in line.split():
                word = word.strip(punctuation)
                _len = len(word)
                if _len >= n:
                    d[_len].append(word)
    return d

您的dict将包含文件中按长度分组且所有字符长度至少为n的所有字词。