#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 строке.