Python 如何使文本输出简单、快捷?
我想修改一些文本文件。但是我的剧本太长了 你怎么能缩短?谁能对我的剧本提出建议Python 如何使文本输出简单、快捷?,python,loops,if-statement,find,output,Python,Loops,If Statement,Find,Output,我想修改一些文本文件。但是我的剧本太长了 你怎么能缩短?谁能对我的剧本提出建议 with open("find_c_volume_show.txt", "r") as f: for line in f: if "%" in line: line = line.split(',') vser = line[0] vol = line[1] aggr = line[2]
with open("find_c_volume_show.txt", "r") as f:
for line in f:
if "%" in line:
line = line.split(',')
vser = line[0]
vol = line[1]
aggr = line[2]
node = line[7]
if 'TB' in line[3]:
tcap = str(line[3].split("TB")[0])
tcap = float(tcap) if '.' in tcap else int(tcap)
elif 'GB' in line[3]:
tcap = str(line[3].split("GB")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024)
elif 'MB' in line[3]:
tcap = str(line[3].split("MB")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024 /1024)
elif 'KB' in line[3]:
tcap = str(line[3].split("KB")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024 /1024 /1024)
elif 'B' in line[3]:
tcap = str(line[3].split("B")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024 /1024 /1024 /1024)
else:
print ("Please check script.")
if 'TB' in line[4]:
acap = str(line[4].split("TB")[0])
acap = float(acap) if '.' in acap else int(tcap)
elif 'GB' in line[4]:
acap = str(line[4].split("GB")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024)
elif 'MB' in line[4]:
acap = str(line[4].split("MB")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024 /1024)
elif 'KB' in line[4]:
acap = str(line[4].split("KB")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024 /1024 /1024)
elif 'B' in line[4]:
acap = str(line[4].split("B")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024 /1024 /1024 /1024)
else:
print ("Please check script.")
if 'TB' in line[5]:
ucap = str(line[5].split("TB")[0])
.....
if 'TB' in line[6]:
ucp = str(line[6].split("TB")[0])
.....
if 'TB' in line[8]:
saved = str(line[8].split("TB")[0])
.....
line = vser, vol, aggr, tcap, acap, ucap, ucp, saved
print (line)
我想让循环acap=line[4]ucap=line[5]ucp=line[6]saved=line[8]值与tcap类似
下面是我的脚本
with open("find_c_volume_show.txt", "r") as f:
for line in f:
if "%" in line:
line = line.split(',')
vser = line[0]
vol = line[1]
aggr = line[2]
node = line[7]
if 'TB' in line[3]:
tcap = str(line[3].split("TB")[0])
tcap = float(tcap) if '.' in tcap else int(tcap)
elif 'GB' in line[3]:
tcap = str(line[3].split("GB")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024)
elif 'MB' in line[3]:
tcap = str(line[3].split("MB")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024 /1024)
elif 'KB' in line[3]:
tcap = str(line[3].split("KB")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024 /1024 /1024)
elif 'B' in line[3]:
tcap = str(line[3].split("B")[0])
tcap = (float(tcap) if '.' in tcap else int(tcap) /1024 /1024 /1024 /1024)
else:
print ("Please check script.")
if 'TB' in line[4]:
acap = str(line[4].split("TB")[0])
acap = float(acap) if '.' in acap else int(tcap)
elif 'GB' in line[4]:
acap = str(line[4].split("GB")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024)
elif 'MB' in line[4]:
acap = str(line[4].split("MB")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024 /1024)
elif 'KB' in line[4]:
acap = str(line[4].split("KB")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024 /1024 /1024)
elif 'B' in line[4]:
acap = str(line[4].split("B")[0])
acap = (float(acap) if '.' in acap else int(tcap) /1024 /1024 /1024 /1024)
else:
print ("Please check script.")
if 'TB' in line[5]:
ucap = str(line[5].split("TB")[0])
.....
if 'TB' in line[6]:
ucp = str(line[6].split("TB")[0])
.....
if 'TB' in line[8]:
saved = str(line[8].split("TB")[0])
.....
line = vser, vol, aggr, tcap, acap, ucap, ucp, saved
print (line)
我想在文本中匹配TB容量格式。
下面是我的文本文件
Vserver,Volume,Aggregate,Total,Avail,Used,UsedP,Node,Saved
FAS8040-ZZZZ,vol0,Node1_aggr0,466.6GB,436.0KB,30.60MB,6%,FAS8040-ZZZZ,0B
FAS8040-YYYY,vol0,Node2_aggr0,46.6GB,428.6KB,38.07B,8%,FAS8040-YYYY,23KB
FAS8040-XXXX,vol0,Node1_aggr0,466GB,436.0GB,30.60GB,6%,FAS8040-XXXX,44GB
FAS8040-AAAA,vol0,Node2_aggr0,466.6TB,428.6MB,38.07MB,8%,FAS8040-AAAA,102MB
也许这将帮助您开始:
unit = ['TB', 'GB', 'MB', 'KB', 'B']
with open("find_c_volume_show.txt", "r") as f:
for line in f:
if "%" in line:
line = line.split(',')
out = []
for l in line[3:6] + [line[8]]:
try:
ind = [unit[i] in l for i in range(5)].index(True)
except ValueError:
print('please check script')
val = str(l.split(unit[ind])[0])
out.append(float(val)/1024**ind)
line = line[0:3] + out[:-1] + line[6:8] + [out[-1]]
print(line)
elif'GB':,你是说第[3]行中的elif'GB':?太长了,什么意思?它有30行长,有什么问题吗?当你说你的脚本太长时,你是说代码太多了,还是说太慢了?我想你可以简化它,但不会有任何区别。25行或30行是相同的…我编辑我的问题。我的脚本将是add if loop for ucap=line[5]ucp=line[6]saved=line[8]。请再查一下,非常感谢。但我无法得出结果。那剧本不管用。请解释你的剧本。我不明白line=line[0:3]+out[:-1]+line[7]+out[-1]嗨,是的,我做了一些修改,这应该会更好。您提到的行只是将多个列表连接到一个列表中。python中的+运算符只执行串联。请注意,这行代码有一个错误,我在更新的答案中更正了它。太棒了!非常感谢。我添加了那个代码的输出脚本。但这会使错误回溯最后一次调用:文件3.sum_data.py,第70行,在f.writeline+“\n”TypeError中:只能将列表而不是str连接到列表我将此脚本添加到打印位置。f=openmod\u c\u vol\u size.txt,“w”f.writeVserver,Volume,Aggregate,Total,Avail,Used,UsedP,Node,Saved\n f.writeline+“\n”f.close您正在将“\n”这是一个字符串添加到作为列表的行中。要解决此问题,请执行以下操作:f.write','.joinline+'\n'