【问题标题】:Counting lines in a file without using enumerate [duplicate]在不使用枚举的情况下计算文件中的行数[重复]
【发布时间】:2020-02-02 04:33:33
【问题描述】:

所以我有一个包含十几行文本的(文本)文件,我的任务是使用函数计算行数。我见过针对此类任务的其他解决方案,但他们使用了 enumerate 函数。

我的班级还没有学会这一点,所以我想弄清楚如何在不枚举的情况下做到这一点。

我在想我会写一个函数来计算文本文件中的\n

这行得通吗?我该怎么做呢?我可以运行一个拆分并以某种方式计算拆分吗?

这是我目前的代码,还不是很远:

def num_lines_in_file():

    path = 'planets.txt'
    file_handle - open(path)
    count = 0

    for line in file_handle:
        count += #here is where i'm lost

print(f"\nProblem 2: {num_lines_in_file()}")

【问题讨论】:

  • 1。使用count += 1,最后使用return count。你的代码是正确的。
  • 完成后关闭文件。最好使用with open(path, "r") as file_handle:
  • count = sum(1 for _ in file_handle)?
  • 您的num_lines_in_file 没有返回任何内容?

标签: python


【解决方案1】:

怎么样

def num_lines_in_file():
    path = 'planets.txt'
    file_handle = open(path, "r")
    return len(file_handle.readlines())

请查看the docs

【讨论】:

  • 不必要的低效...
  • 这会不必要地将整个文件的内容加载到内存中,然后才能计数。
  • @blhsing 更糟糕的是,它会将其加载到list 行中。
  • 谢谢,这让我得到了我正在寻找的结果,这正是我们在课堂上一直使用的那种语法。你能向我解释一下,这个功能是如何运作的吗? “return len(file_handle.reallines())”是否计算换行符?这就是导致结果的原因吗?抱歉,我们才 3 周,我是新手。
  • @genadov readlines 方法解析文件并使用文件结尾 (EOF) 字符将行拆分为 python 列表。这实际上解决了您的问题,但其他评论者实际上是正确的一点,即 readlines() 在创建数组之前实际上读取了整个文件,而数组实际上是无用的,因为只有 len() 方法用于查找实际的行数。我提供的代码也没有关闭文件,所以这是另一个减分点:)
【解决方案2】:

你已经读了一行,所以将计数加一:

for line in file_handle:
    count += 1

附:另请注意,您的函数缺少return 语句。

【讨论】:

  • 这让我得到了 1 的结果
【解决方案3】:

x += yx = x + y 的代理。

for i, x in enumerate(sequence):
    ...

大致相当于:

i = 0
for x in sequence:
    ...
    i += 1

您现在有足够的信息来修复您的代码。

【讨论】:

  • 剧透警报:您大约是。 1 个字符,一个返回 :-)
【解决方案4】:

您可以使用列表推导式并简单地总结一下:

sum([1 for line in open('/tmp/f.py')])
# or as a generator, as mentioned by Daniel Mesejo:
sum([1 for line in open('/tmp/f.py')])

输出:

26

【讨论】:

  • 不需要列表,直接sum(1 ...)即可
猜你喜欢
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 2020-01-07
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多