疑难解答,无法将我的浮动列表转换为字符串

时间:2016-09-29 16:49:51

标签: list file python-3.x floating-point

我有一个读取文件并处理数据的函数,我需要将其写入新文件。但是,我不能将数据放入文件,因为它不是字符串格式,即使我认为我已将其转换为函数中的字符串?我是否忽略了某些内容或者是否需要添加更多代码?

def process_data(data_file):
    data = open(data_file, "r") 
    next (data)
    for line in data:
        line = line.rstrip()
        m = line.split("\t")
        x = m[2:]
        numbers = [float(i) for i in x]
        avg = [float(sum(numbers))/len(numbers)]
        max_num = [max(numbers)]
        min_num = [min(numbers)]
        main_list = avg + max_num + min_num
        values = [str(i) for i in main_list]
        print('\t'.join(map(str,values)))

我尝试编写错误时得到的错误是"参数必须是str not not None"

write(process_data(data_file))

1 个答案:

答案 0 :(得分:1)

你的函数返回None。不要print你的返回值,只是累积到一个字符串列表然后返回它最后由换行连接(避免字符串连接效率低下)

我还修复了一些笨拙的列表创建并删除了一个不必要的强制转换为str(两次完成)。

def process_data(data_file):
    retval = []
    data = open(data_file, "r") 
    next (data)
    for line in data:
        line = line.rstrip()
        m = line.split("\t")
        x = m[2:]
        numbers = [float(i) for i in x]
        values = [float(sum(numbers))/len(numbers),max(numbers),min(numbers)]
        retval.append('\t'.join(map(str,values)))
   return "\n".join(retval)

请注意,使用csv模块作为读者和编写器会更好,可以为您节省大量的拆分,加入和转换......但这对CodeReview来说更像是一份工作。