我正在尝试计算难以理解的单词的数量'在一个文件中,这需要我计算每个单词中的字母数。现在,我只想从一个文件中一次一个地获取单个单词。我写了以下内容:
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
.
.
.
似乎一次打印一个字符而不是一次打印一个字。我真的很想知道这里发生了什么。有什么建议吗?
答案 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
的所有字词。