2015-11-04 47 views
4

我正在尝试计算文件中“难度单词”的数量,这需要我计算每个单词中的字母数。现在,我只是试图从文件中逐个获取单个单词。我已经写了以下内容:尝试使用Python计算文件中的单词

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 

. 
. 
. 

这似乎是在同一时间,在一次打印一个字符,而不是一个字。我真的很想知道更多关于这里实际发生的事情。有什么建议么?

+1

尝试打印每一行,看看它是什么;) – alfasin

回答

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 open('infile.txt', 'r+') as fopen: 
    for line in fopen: 
     for word in line.split(): 
      print(word) 
+0

这工作完美;谢谢。我不知道这种方法。 – AustinC

+0

我的荣幸@AustinC –

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 
+1

啊,我明白了。我对Python还是比较新的,所以我正在采取正确的方式来编写脚本。你的例子非常有帮助;谢谢。 – AustinC

+0

欢迎您。顺便说一句,你为什么在输入文件上使用模式'r +'?你打算写信给它吗? – Pynchia

+0

最初,是的,我做到了。但我想我会用另一个文件来输出,只是为了让事情更清洁。我一定会改变它。 – AustinC

0

你的代码是给你一个字符,因为你叫.read()其中存储的所有内容作为单个字符串,所以当你for line in fileinput你迭代通过字符串字符,没有如果您确实需要一个可以调用readlines的行的列表,那么使用读取和拆分行的原因很简单,就是遍历文件对象。

如果要组词的长度用这个词作为密钥的长度使用的字典,你将要还从话,你可以用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 

你的字典将包含按长度分组的文件中的所有单词,并且全部至少包含n个字符。

相关问题