python - 如何在 python 上工作输出?

标签 python join output

我想制作一个用于修改存储容量的脚本,但我遇到了一些问题。

我的脚本有以下错误:

Traceback (most recent call last):
  File "test.py", line 20, in <module>
    mod_f.write(','.join(line) + '\n')
TypeError: sequence item 3: expected string, float found

下面是我的脚本。

mod_f = open("mod_c_vol_size.txt", 'w')
mod_f.write("Vserver,Volume,Aggregate,Total,Avail,Node,SaveA,SaveD,SaveC,Snap,Tused\n")
unit = ['TB', 'GB', 'MB', 'KB', 'B']
with open("find_c_vol_modify.txt", "r") as f:
        next(f)
        for line in f:
                if len(line.strip()) != 0:
                        line = line.split(',')
                        out = []
                        for l in line[3:5] + line[6:11]:
                                l = l.replace('\n','')
                                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[:-5] + line[5:6] + out[2:]
                        print (line)
mod_f.write(','.join(line) + '\n')
mod_f.close()

错误位于行 mod_f.write(','.join(line) + '\n')

下面是我的输入文本文件。

Vserver,Volume,Aggregate,Total,Avail,Node,SaveA,SaveD,SaveC,Snap,Tused
XXXX,YYYY,Node1_aggr1,1TB,1023GB,FAS8040-ZZZZ,0B,0B,0B,0B,177.7MB
XXXX,ZZZZ,Node1_aggr1,3TB,3.00TB,FAS8040-ZZZZ,0B,0B,0B,0B,1.60GB
XXXX,CCCC,Node1_aggr1,1TB,907.9GB,FAS8040-ZZZZ,0B,0B,0B,0B,116.1GB
XXXX,VVVV,Node1_aggr1,200GB,200.0GB,FAS8040-ZZZZ,0B,0B,0B,0B,6.25MB

下面是预期的输出文件。

['XXXX', 'YYYY', 'Node1_aggr1', 1.0, 0.9990234375, 'FAS8040-ZZZZ', 0.0, 0.0, 0.0, 0.0, 0.00016946792602539061]
['XXXX', 'ZZZZ', 'Node1_aggr1', 3.0, 3.0, 'FAS8040-ZZZZ', 0.0, 0.0, 0.0, 0.0, 0.0015625]
['XXXX', 'CCCC', 'Node1_aggr1', 1.0, 0.88662109375, 'FAS8040-ZZZZ', 0.0, 0.0, 0.0, 0.0, 0.11337890625]
['XXXX', 'VVVV', 'Node1_aggr1', 0.1953125, 0.1953125, 'FAS8040-ZZZZ', 0.0, 0.0, 0.0, 0.0, 5.9604644775390625e-06]

最佳答案

每个 line 列表中的第四项是您计算的 float 元素:1.0, 3.0, 1.0, 0.1953125(如下所示)元素)。 join 仅适用于字符串。您需要将 float 项转换为 string 。也许

out.append(str(float(val)/1024**ind))

或者在你写之前的一些概括

line = [str(item) for item in line]

关于python - 如何在 python 上工作输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45363175/

相关文章:

c# - join 2个查询结果orderby两个不同的值

python - 爬行时清空输出文件

java - 设计链表 - Leetcode #707 - 得到错误的输出

go - 这个 golang 代码的输出是什么?

python - django 2.0 re_path 中的正则表达式

python - 打印来自 2 个不同列表的数据及其索引

mysql - 从连接表中查询日期列

python - 将对象添加到 SQLAlchemy 关联对象时出现 KeyError

python - 在 Python 中实现对字符串中包含的整数求和的函数

MySQL 左连接和排除值