拆分|,解包,转换为浮动mult * 100并调用int:
import csv
with open("in.csv") as f:
r = csv.reader(f,delimiter="|")
for row in r:
temp = ""
for sub in row:
try:
a, b = sub.split(":")
temp += "{}:{}|".format(a, int(float(b) * 100))
except ValueError as e:
continue
print(temp)
输出:
s12,NONE,s11:172|s17:172|s14:67|s10:67|s19:67|s13:67|
s14,NONE,s13:449|s11:172|s17:172|s12:67|
dir="."将tmpfile保存在当前目录中,以便我们以后可以使用它,delete=False确保在我们离开with块时不删除该文件然后我们只需要调用移出with以更新原始文件。
或使用if来捕获空字符串:
import csv
with open("in.csv") as f:
r = csv.reader(f,delimiter="|")
for row in r:
temp = ""
for sub in row:
if sub:
a, b = sub.split(":")
temp += "{}:{}|".format(a, int(float(b) * 100))
print(temp)
import csv
from tempfile import NamedTemporaryFile
from shutil import move
with open("in.csv") as f, NamedTemporaryFile(dir=".",delete=False) as out:
r = csv.reader(f,delimiter="|")
for row in r:
temp = ""
for sub in row:
if sub:
a, b = sub.split(":")
temp += "{}:{}|".format(a, int(float(b) * 100))
out.write(temp+"\n")
move(out.name,"in.csv")
in.csv之后:
s12,NONE,s11:172|s17:172|s14:67|s10:67|s19:67|s13:67|
s14,NONE,s13:449|s11:172|s17:172|s12:67|
您也可以通过更改循环来编写:
with open("in.csv") as f, NamedTemporaryFile(dir=".",delete=False) as out:
r = csv.reader(f,delimiter="|")
for row in r:
for sub in row:
if sub:
a, b = sub.split(":")
out.write("{}:{}|".format(a, int(float(b) * 100)))
out.write("\n")
move(out.name,"in.csv")