【问题标题】:read specific line in text and sum the numbers and the following lines阅读文本中的特定行并将数字和以下行相加
【发布时间】:2017-09-16 09:14:15
【问题描述】:

嗨,我在做一些作业时遇到了麻烦。我有一个用几行写成的文本文件中的数字列表。我的项目要求我选择一个特定的行,然后选择几行来总结它们。例如,从第 4 行总结下 4 行。 这是我现在尝试的代码

fichNbr = open("nombres.txt", "r")
ligneDepart = int(input("entrer la ligne de depart: "))
nb_lignes = int(input("entrer le nombre de ligne a lire: "))
somme3 = 0
for line in fichNbr:
    line = fichNbr.readline()
    print(line)
    for i in range(ligneDepart,(ligneDepart + nb_lignes),1):
        n = fichNbr.readline().split()
        for f in n:
                somme3 += int(f)
print(somme3)

【问题讨论】:

    标签: python text sum line readline


    【解决方案1】:

    我真的不明白你的代码做错了什么(有点匆忙,所以没有足够的时间来分析抱歉)但是如果你正在寻找一种可以满足你需要的代码(我认为),那就是:

    f = open("test.txt", "r")
    start_line = input("line to start ") - 1
    finish_line = input("line to finish ") - 1
    soma = 0
    for i, line in enumerate(f):
        if i >= start_line and i <= finish_line:
            soma += int(line)
    print soma
    

    简单解释一下,枚举是一个内置函数,它将遍历文件 f 并返回一个元组,其中包含行号(从零开始)以及行中的任何内容。您需要做的就是检查 i 是否等于或大于您要开始阅读的行,并且是否小于您要停止阅读的行。

    希望对你有帮助:)

    【讨论】:

    • 谢谢,我会试一试
    【解决方案2】:

    要对指定行的所有行(包括给定行)求和,行变量需要减去 1。如果不包括该行,则按原样使用变量。使用 with ... 打开文件以使其自动关闭并选择 read ('r') 作为模式。创建一个变量来存储行并选择 readlines()。这会将每一行存储到列表中自己的位置。

    创建另一个变量来实际对行求和。使用与给定起始行变量关联的 while 循环,只要它小于列表的长度,遍历列表,将每一行添加到 sum 变量(如使用 nums 所示)。

    由于 open() 读取行的方式,它会将其全部作为字符串拉出,末尾带有 \n。添加 strip('\n') 以删除 \n 并将其全部转换为整数。将 1 添加到您的 line 变量以正确迭代并结束循环。

    def example(file_name, line):
        with open(file_name, 'r') as f:
            x = f.readlines()
        line = line - 1
        nums = 0
        while line < len(x):
            nums += int(x[line].strip('\n'))
            line += 1
        print(nums)
    
    example("example.txt", 4)
    # My example.txt file has a different number on each line in this order: 2, 4, 3, 7, 5, 6, 4
    

    如果您只想在给定行之后执行一定数量的行,请将这个额外的数字添加到函数中,然后在从 line 变量中减去 1 之前将 line 变量添加到这个额外的变量中。在结束时使用这个修改后的额外变量,而不是迭代列表的长度。

    def example(file_name, line, end_line):
        with open(file_name, 'r') as f:
            x = f.readlines()
        end_line += line
        line = line - 1
        nums = 0
        while line < end_line:
            nums += int(x[line].strip('\n'))
            line += 1
        print(nums)
    
    example("example.txt", 4, 2)
    # My example.txt file has a different number on each line in this order: 2, 4, 3, 7, 5, 6, 4
    

    同样,如果您不希望包含给定的行,请不要减去 1。

    【讨论】:

    • 没问题。希望它有所帮助。我不确定你的代码有什么问题,所以我不能评论它,但你应该使用 "with open("nombres.txt", "r") as fichNbr:" 而不是 "fichNbr = open(" nombres.txt", "r")" 因为你的脚本从不关闭文件,但是...就像它一样。
    • 如果其中一个回答回答了您的问题,请记得将其标记为已回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多