Устранение неполадок, не удается преобразовать мой список с плавающей запятой в строку

#list #file #python-3.x #floating-point

#Список #файл #python-3.x #с плавающей запятой

Вопрос:

У меня есть функция, которая считывает данные из файла и обрабатывает данные, которые мне нужно записать в новый файл. Однако я не могу поместить данные в файл, потому что они не в строковом формате, хотя я думал, что преобразовал их в строку в функции? Я что-то упустил из виду или мне нужно добавить больше кода?

 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, а не None»

 write(process_data(data_file))
  

Ответ №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 модуля в качестве средства чтения и записи было бы намного лучше, сэкономило бы вам много преобразований split, join, str… Но это скорее работа для CodeReview.

Комментарии:

1. Хорошо! Теперь посмотрите мое редактирование. Его можно улучшить с точки зрения создания списка. Я создаю main_list в 1 строке.