Python импорт форматирования TXT - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть файл Excel со списком чисел, и я сохранил его как файл .txt, а затем сказал:

open_file = open('list_of_numbers.txt','r')

for number in open_file:
    number = int(number)
    while x < 20000:
        if (x > number):
            print number
        x = x + 100
        y = y + 100

И я получил это сообщение об ошибке:

ValueError: недопустимый литерал для int () с основанием 10: '2100.00 \ r \ n'

Как я могу раздеть ' и \r\n'?

Моя конечная цель - создать еще один столбец рядом со столбцом чисел и, если число, например, 145,

145, '100-199'
167, '100-199'
1167, '1100-1199'

такой вывод.

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011

Давайте сформулируем это как ответ.Проблема не в \r\n.Проблема в том, что вы пытаетесь разобрать строку, которая содержит значение с плавающей точкой, как целое число.См. (Без перевода строки, символы новой строки):

>>> int("2100.00")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '2100.00'

(как вы можете видеть, кавычки ' не являются частью значения, они просто указывают, что вы имеете дело сстрока)

, тогда как

>>> int("2100\r\n")
2100

Документация гласит:

Если аргумент является строкой, он долженсодержит возможно десятичное число со знаком, представимое в виде целого числа Python, возможно, встроенное в пробел.

, где можно найти буквальное определение целого числа Python здесь .

Решение:

Использование float:

>>> float("2100.00\r\n")
2100.0

, затем вы можете преобразовать его в целое число, если хотите (также рассмотрите round):

>>> int(float("2100.00\r\n"))
2100

Преобразование значения с плавающей запятой в целочисленные произведения (из документации ):

Преобразование с плавающей запятойчисла до целых усеченных (до нуля).

1 голос
/ 15 февраля 2011

Чтобы решить вашу непосредственную проблему, ответьте @Felix Kling.

Если вас интересуют БУДУЩИЕ проблемы, читайте дальше.

(1) То, что \r не является частью проблемы в этом особом случае, но интригует: вы создаете файл в Windows и читаете его в Linux / OSX / etc? Если это так, вы должны открыть свой текстовый файл с помощью «rU» (универсальные символы новой строки), чтобы строка ввода в Python имела только \n.

(2) В любом случае, очень хорошая идея сделать line = line.rstrip('\n') ... в противном случае, в зависимости от того, как вы разбили строки, вы можете получить последнее поле, содержащее нежелательные \n.

(3) Вы можете предпочесть использовать xlrd для непосредственного чтения из файла Excel - это избавит вас от всех неприятностей. [Dis] claimer: я автор xlrd.

0 голосов
/ 15 февраля 2011

Попробуйте это:

number = int(number.strip(string.whitespace + "'"))

Вам нужно будет добавить import string в начало вашего скрипта. Смотрите также: http://docs.python.org/library/stdtypes.html#str.strip

...