'if statement'删除所有不符合条件的行,我不希望这样做

问题描述 投票:-1回答:1

我是Python的新手,我正在为相当基本的东西而苦苦挣扎。

我想做什么:

我有一个由多行组成的文本文件。我希望索引号[-3]乘以2。

但是,我只希望Python将每行的索引[-3]相乘if索引号[6]等于1。

如果我的行的索引号[6]为0,我不想将该数字乘以2。我只希望该行保留在文本文件中,完全不变。

这里是问题:

如果我使用'if'语句,则如果我符合要求,它将完美地乘以索引号[-3]。第六行索引为1的乘法行的示例,因此Python可以乘以2:

FLBO id'边界'st 0 ty 1 q_ dw 0 0.1 0 flbo ||这变成->

FLBO id'边界'st 0 ty 1 q_ dw 0 0.2 0 flbo

但是,如果Python看到索引号[6]不为1,它将跳过该行。这不是我想要的,因为这样会丢失数据。在开始脚本之前,我的文本文件有10行。结果文件有9行。因此,它丢失了一条线。示例“:

FLBO id'边界'st 0 ty 0 q_ dw 0 8 0 flbo ||这变成->

没有。线不见了。

我的问题:

我如何让Python'记住'if语句为false的行?

我尝试使用pass函数,但结果完全相同。

我当前的脚本/解决方案:

我通过将索引号[6] = 0的行乘以* 1来非常丑陋地解决了这个问题。这样,数字不会改变。但这不是一种干净的编程方式,我想提高效率。代码:

all_data = []
with open('C:\\directory1', 'r') as file_handler:
    for line in file_handler.readlines():
        if line.strip():
            each_line_data = line.split()
            if each_line_data[6] == '1':
                old_debiet = each_line_data[-3]
                new_debiet = float(old_debiet) * 2
                each_line_data[-3] = str(new_debiet)
                new_each_line_data = ' '.join(each_line_data)
                all_data.append(new_each_line_data)
            if each_line_data[6] == '0':
                old_debiet = each_line_data[-3]
                new_debiet = float(old_debiet) * 1
                each_line_data[-3] = str(new_debiet)
                new_each_line_data = ' '.join(each_line_data)
                all_data.append(new_each_line_data)
                print(new_each_line_data)

with open('C:\\directory2', 'w') as file_handler:
    for item in all_data:
        file_handler.write("{}\n".format(item))

python if-statement multiplying
1个回答
1
投票

您需要查看每行的内容,并取消缩进每行需要做的事情:

all_data = []
with open('C:\\directory1', 'r') as file_handler:
    for line in file_handler.readlines():
        if line.strip():
            each_line_data = line.split()
            if each_line_data[6] == '1':
                old_debiet = each_line_data[-3]
                new_debiet = float(old_debiet) * 2
                each_line_data[-3] = str(new_debiet)
            new_each_line_data = ' '.join(each_line_data)
            all_data.append(new_each_line_data)
            print(new_each_line_data)

with open('C:\\directory2', 'w') as file_handler:
    for item in all_data:
        file_handler.write("{}\n".format(item))

正如您所看到的,现在在=='1' if之外发生了重新加入和追加行的情况。无论是1行还是0行或其他任何行,这正是您需要对每一行进行的操作。 :)


0
投票

您可以减少这样的代码:

all_data = []
with open('C:\\directory1', 'r') as file_handler:
    for line in file_handler.readlines():
        if line.strip():
            each_line_data = line.split()

            if each_line_data[6] == '1':
                multiplier = 2
            elif each_line_data[6] == '0'
                multiplier = 1
            else:
                multiplier = 1

            old_debiet = each_line_data[-3]
            new_debiet = float(old_debiet) * 2
            each_line_data[-3] = str(new_debiet)
            new_each_line_data = ' '.join(each_line_data)
            all_data.append(new_each_line_data)

with open('C:\\directory2', 'w') as file_handler:
    for item in all_data:
        file_handler.write("{}\n".format(item))
© www.soinside.com 2019 - 2024. All rights reserved.