Подтвердить что ты не робот

Проблема с написанием файла Python

Код

def rainfallInInches():
file_object = open('rainfalls.txt')
list_of_cities = []
list_of_rainfall_inches = []

for line in file_object:
    cut_up_line = line.split()
    city = cut_up_line[0]
    rainfall_mm = int(line[len(line) - 3:])
    rainfall_inches = rainfall_mm / 25.4
    list_of_cities.append(city)
    list_of_rainfall_inches.append(rainfall_inches)

inch_index = 0
desired_file = open("rainfallInInches.txt", "w")
for city in list_of_cities:
    desired_file.writelines(str((city, "{0:0.2f}".format(list_of_rainfall_inches[inch_index]))))
    inch_index += 1
desired_file.close()

rainfalls.txt

Manchester 37
Portsmouth 9
London 5
Southampton 12
Leeds 20
Cardiff 42
Birmingham 34
Edinburgh 26
Newcastle 11

rainfallInInches.txt Это нежелательный выход

( "Манчестер", "1.46" ) ( "Портсмут", "0,35" ) ( "Лондон", "0,20 ') (" Саутгемптон "," 0,47 ") (" Лидс "," 0,79 ") (" Кардифф "," 1.65 ") (" Бирмингем "," 1.34 ") (" Эдинбург "," 1.02 ") (" Ньюкасл", '0.43')

Моя программа берет данные из "rainfalls.txt" с информацией о осадках в мм и преобразует миллиметр в дюймы, а затем записывает эту новую информацию в новый файл "rainfallInInches.txt".

Я получил это далеко, но я не могу понять, как форматировать "rainfallInInches.txt", чтобы он выглядел как "rainfalls.txt".

Имейте в виду, что я студент, которого вы, вероятно, собрали по моему взломанному коду.

4b9b3361

Ответ 1

Моя программа берет данные из "rainfalls.txt" с информацией о осадках в мм и преобразует миллиметр в дюймы, а затем записывает эту новую информацию в новый файл "rainfallInInches.txt".

Вы можете разделить синтаксический анализ входного файла, преобразование от мм до дюймов и окончательное форматирование для записи:

#!/usr/bin/env python
# read input
rainfall_data = [] # city, rainfall pairs
with open('rainfalls.txt') as file:
    for line in file:
        if line.strip(): # non-blank
            city, rainfall = line.split() # no comments in the input
            rainfall_data.append((city, float(rainfall)))

def mm_to_inches(mm):
    """Convert *mm* to inches."""
    return mm * 0.039370

# write output
with open('rainfallInInches.txt', 'w') as file:
    for city, rainfall_mm in rainfall_data:
        file.write("{city} {rainfall:.2f}\n".format(city=city,
            rainfall=mm_to_inches(rainfall_mm)))

rainfallInInches.txt:

Manchester 1.46
Portsmouth 0.35
London 0.20
Southampton 0.47
Leeds 0.79
Cardiff 1.65
Birmingham 1.34
Edinburgh 1.02
Newcastle 0.43

Если вы уверены, что каждый шаг является правильным в изоляции, вы можете объединить шаги:

#!/usr/bin/env python
def mm_to_inches(mm):
    """Convert *mm* to inches."""
    return mm * 0.039370

with open('rainfalls.txt') as input_file, \
     open('rainfallInInches.txt', 'w') as output_file:
    for line in input_file:
        if line.strip(): # non-blank
            city, rainfall_mm = line.split() # no comments
            output_file.write("{city} {rainfall:.2f}\n".format(city=city,
                rainfall=mm_to_inches(float(rainfall_mm))))

Он производит тот же результат.

Ответ 2

Во-первых, лучше изменить свой синтаксический анализатор, чтобы разделить строку по пробелу. При этом вам не нужна сложная логика для набора чисел. После этого, чтобы правильно печатать, измените свой вывод на

 file.write("{} {0:0.02f}\n".format(city,list_of_rainfall_inches[inch_index] ))