我是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))
您需要查看每行的内容,并取消缩进每行需要做的事情:
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行或其他任何行,这正是您需要对每一行进行的操作。 :)
您可以减少这样的代码:
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))