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

 #!/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')

то у меня, понятное дело, получается добавление информации при каждом открытии, к уже существующей.
vic57
ну в вашем коде так и должно быть.
 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()
Tenebras
vic57
ну в вашем коде так и должно быть.

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


Ага. Спасибо!
Rodegast
 file = open('stations.txt', 'w')
for line in lines:
	# Если длина строки 83 символа, то вырезаем из строки нужные значения
	if len(line) == 83 :
		......
		file.write(out)
file.close()
vic57
Tenebras
list = sock.read()
ключевые слова python лучше не использовать
 lst = sock.read()
Tenebras
file.write(out)
перевода строки нет
 f=open('stations.txt','w']
#.....
f.write(out + '\n')

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

 with open('yourfile.txt', 'w') as f:
    # do some operations.... f.write etc..
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB