Основа моложе, чем Ваш вопрос, и определенно чувствует себя подобно 1.0, но пользовательский опыт мили лучше, чем опыт использования любого из "межплатформенных" приложений на Mac
http://menial.co.uk/software/base/
, я рекомендую купить лицензию, прежде чем разработчик поймет, что взимает слишком мало за него.
ОБНОВЛЕНИЕ: С декабря 2008 Основа теперь до версии 2.1, это стало превосходным продуктом. Я не помню то, чего это раньше стоило, но я заплатил за 1.x к 2.x обновление. Все еще настоятельно рекомендованный.
ДРУГОЕ ОБНОВЛЕНИЕ: Основа доступна на Mac App Store, можно найти полезным считать обзоры там.
Питонический способ перебора файла и преобразования в int:
for line in open(fname):
if line.strip(): # line contains eol character(s)
n = int(line) # assuming single integer on each line
То, что вы пытаетесь сделать, немного сложнее, но все же не так просто:
h = open(fname)
for line in h:
if line.strip():
[int(next(h).strip()) for _ in range(4)] # list of integers
Вот так обрабатывает 5 строк одновременно. Используйте h.next ()
вместо next (h)
до Python 2.6.
Причина, по которой у вас было ValueError
, заключается в том, что int
не может преобразовать пустую строку в целое число. В этом случае вам нужно будет либо проверить содержимое строки перед преобразованием, либо исключить ошибку:
try:
int('')
except ValueError:
pass # or whatever
readings = (infile.readline())
print readings
while readings != 0:
global count
readings = int(readings)
С этим кодом проблема. readings
- это новая строка, прочитанная из файла - это строка. Следовательно, вы не должны сравнивать его с 0. Кроме того, вы не можете просто преобразовать его в целое число, если вы не уверены , что это действительно одно число. Например, пустые строки приведут здесь к ошибкам (как вы наверняка уже заметили).
А зачем вам глобальный счетчик? Это определенно плохой дизайн в Python.
У вас проблема с этой строкой:
while file_to_read != " ":
Не удается найти пустую строку. Находит строку, состоящую из одного пробела. По-видимому, это не то, что вы ищете.
Слушайте советы других. Это не очень идиоматический код Python, и он будет намного понятнее, если вы перебираете файл напрямую, но я думаю, что эту проблему тоже стоит отметить.
Я создаю программу, которая читает файл и если первая строка файла не пусто, читаются следующие четыре линий. Расчеты производятся на эти строки, а затем следующая строка прочтите.
Что-то вроде этого должно сработать:
for line in infile:
next_lines = []
if line.strip():
for i in xrange(4):
try:
next_lines.append(infile.next())
except StopIteration:
break
# Do your calculation with "4 lines" here