Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 15, 2016 17:39:37

Tenebras
Зарегистрирован: 2016-07-05
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу разобраться с записью в файл

Задача: запись в файл некой информации, получаемой из Сети. Но при каждом открытии программы необходимо что бы предыдущая информация стиралась и записывалось по новой.

 #!/usr/bin/python
# coding: utf8
import urllib
import sys
import string
# Получаем файл со списком станций c сервера weather.rap.ucar.edu
sock = urllib.urlopen("http://weather.rap.ucar.edu/surface/stations.txt")
list = sock.read()
sock.close()
# Разбиваем текст на отдельные строки
lines = list.split('\n')
# Перебираем по очереди все строки
for line in lines:
	# Если длина строки 83 символа, то вырезаем из строки нужные значения
	if len(line) == 83 :
		# Индекс станции ICAO (отбрасываем пробелы слева и справа)
		icao = line[20:24].strip()
		# Если у данной станции есть индекс ICAO, то считываем остальные параметры
		if len(icao) == 4 :
			# Широта (градус)
			lat = float(line[39:41]) + float(line[42:44])/100
			# Долгота (градус)
			lon = float(line[47:50]) + float(line[51:53])/100
			# Высота над уровнем моря (м)
			elev = float(line[55:59])
			# Если после широты стоит символ S, то делаем значение широты отрицательным
			if line[44:45] == 'S' :
				lat = -lat
			# Если после долготы стоит символ W, то делаем значение долготы отрицательным
			if line[53:54] == 'W' :[code python][/code]
				lon = -lon
			# Записываем только станции, находящиеся от 0 до 60 в.д. и от 30 до 90 с.ш.
#			if (0 < lon < 60 and 30 < lat < 90) :  
			out = "%s\t%.2f\t%.2f\t%.0f" % (icao, lat, lon, elev)
			file = open('stations.txt', 'w')
			file.write(out)
			file.close()
				
lines

Когда я применяю
 file = open('stations.txt', 'w')
У меня записывается только последняя строка из файла.

Если же

 file = open('stations.txt', 'a')

то у меня, понятное дело, получается добавление информации при каждом открытии, к уже существующей.

Отредактировано Tenebras (Окт. 15, 2016 18:05:21)

Офлайн

#2 Окт. 15, 2016 18:57:42

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Не могу разобраться с записью в файл

ну в вашем коде так и должно быть.

 file = open('stations.txt', 'w')
file.write(out)
file.close()
вы открываете файл, записываете 1 строку и закрываете

 #example
f = open('file.txt)
for line in lines:
    f.write(line)
f.close()

Отредактировано vic57 (Окт. 15, 2016 19:01:39)

Офлайн

#3 Окт. 15, 2016 19:00:53

Tenebras
Зарегистрирован: 2016-07-05
Сообщения: 97
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу разобраться с записью в файл

vic57
ну в вашем коде так и должно быть.

Дело в том, что там много строк… а записывает только одну.
Как сделать-то, что б записывал ВСЁ? Не постигну сию мудрость!


Ага. Спасибо!

Отредактировано Tenebras (Окт. 15, 2016 19:01:19)

Офлайн

#4 Окт. 15, 2016 19:38:23

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2760
Репутация: +  185  -
Профиль   Отправить e-mail  

Не могу разобраться с записью в файл

 file = open('stations.txt', 'w')
for line in lines:
	# Если длина строки 83 символа, то вырезаем из строки нужные значения
	if len(line) == 83 :
		......
		file.write(out)
file.close()



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Окт. 15, 2016 22:58:00

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Не могу разобраться с записью в файл

Tenebras
list = sock.read()
ключевые слова python лучше не использовать
 lst = sock.read()
Tenebras
file.write(out)
перевода строки нет
 f=open('stations.txt','w']
#.....
f.write(out + '\n')

Отредактировано vic57 (Окт. 15, 2016 22:59:19)

Офлайн

#6 Окт. 16, 2016 08:58:58

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Не могу разобраться с записью в файл

Поскольку open в Питоне возвращает контекст менеджер, лучше этим воспользоваться:

 with open('yourfile.txt', 'w') as f:
    # do some operations.... f.write etc..

Отредактировано scidam (Окт. 22, 2016 06:16:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version