当前位置: 首页 > 面试题库 >

在Python中遍历文件对象不起作用,但是readlines()可以,但是效率低下

轩辕晔
2023-03-14
问题内容

在以下代码中,如果我使用:

for line in fin:

它仅针对“ a”执行

但是,如果我使用:

wordlist = fin.readlines()
for line in wordlist:

然后执行一遍z。

但是readlines()一次读取整个文件,这是我不想要的。

如何避免这种情况?

def avoids():
    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    num_words = {}

    fin = open('words.txt')

    for char in alphabet:
      num_words[char] = 0
      for line in fin:
        not_found = True
        word = line.strip()
        if word.lower().find(char.lower()) != -1:
          num_words[char] += 1
    fin.close()
    return num_words

问题答案:

该语法for line in fin只能使用一次。完成此操作后,您已经用尽了文件,除非您通过来“重置文件指针”,否则您将无法再次读取它fin.seek(0)。相反,fin.readlines()将为您提供一个列表,您可以反复遍历。

我认为使用Counter(python2.7
+)进行简单的重构可以为您省去麻烦:

from collections import Counter
with open('file') as fin:
    result = Counter()
    for line in fin:
        result += Counter(set(line.strip().lower()))

它将计算文件中包含特定字符的单词数(每行1个单词)(这是您认为原始代码的含义……如果我输入错了,请更正我)

您也可以使用defaultdict(python2.5
+)轻松地做到这一点:

from collections import defaultdict
with open('file') as fin:
    result = defaultdict(int)
    for line in fin:
        chars = set(line.strip().lower())
        for c in chars:
            result[c] += 1

最后,把它踢得很老套-我什至不知道什么时候setdefault被介绍…:

fin = open('file')
result = dict()
for line in fin:
    chars = set(line.strip().lower())
    for c in chars:
        result[c] = result.setdefault(c,0) + 1

fin.close()


 类似资料:
  • 问题内容: @Entity @Table(name = “Section_INST”) public class Section { } 以下程序不起作用-> 如果我将Section.java中的层叠选项更改为CascadeType.ALL,那么它将起作用。 我认为PERSIST应该保存我的对象d =,但是会引发异常: org.hibernate.TransientPropertyValueExc

  • 问题内容: 我对文件进行迭代有问题。这是我在解释器上键入的内容和结果: 当我尝试再次遍历同一个打开的文件时,我什么也没得到! 根本没有输出。为了解决这个问题,我必须对文件进行编辑,然后再次将其打开以进行读取!那是正常行为吗? 问题答案: 是的,这是正常行为。基本上,你是第一次读取文件的末尾(可以像读取磁带一样对它进行图片处理),因此除非你使用重定位到文件开头的位置进行重置,否则你将无法从文件中读取

  • 问题内容: 我正在尝试从模板中的控制器填充对象列表。 这是控制器: 但是,我编写的这段代码无法正常工作: 用户界面中未显示任何内容。 相反,如果我在控制器中编写代码,它将起作用: 由于我知道在控制器中要做的事情很诱人,因此我在尝试避免尽可能多地使用。 如果有人能证明的正确使用和差异betwee 和(其中是控制器的别名),我应该心存感激。 问题答案: 问题是您正在访问内部函数而不是控制器函数中存在的

  • 问题内容: 我试图在HashMap中找到一个键。我可以使用’get’打印选定的键,但是在if语句中使用’containsKey’时,找不到该键。 我知道该键存在于Map中,但它一直返回false。有什么想法的人吗? 我的代码: 这是Location类的代码: 问题答案: 您必须确保该类已正确实现其和方法(文档)。也就是说,如果两个对象实际上相等,则它们应该共享一个公共哈希码,并且它们的方法应该返回

  • 问题内容: 我正在为Python学习win32com,但遇到了一个奇怪的问题。 我正在尝试在词典列表中导出Outlook联系人。我的代码与win32com.client.Dispatch(“ Outlook.Application)完美配合。但是它与win32com.client.gencache.EnsureDispatch(” Outlook.Application)返回0个联系人,该联系人应

  • 我试图使用cURL获取一个HTTP请求响应,这很好。然而,当我在Python中使用“请求”包时,我没有得到任何响应(它只是超时,没有错误或返回响应)。 我的cURL代码如下: 当我在cURL代码中使用-v时,我得到以下消息: 试图144.126.138.12... TCP_NODELAY集 连接到144.126.138.12(144.126.138.12)端口17001(#0) POST/api/