2011-02-15 2 views
0

У меня есть Excel файл со списком номеров, и я сохранил его как .txt файл, а затем пошел, чтобы сказать:Python импорта 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: invalid literal for int() with base 10: '2100.00\r\n'

Как я могу снять ' и \r\n'?

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

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

такого рода продукции.

+3

Проблема не в новом символе линии, число не является целым числом. Это значение поплавка. Используйте 'float()'. –

ответ

-1

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

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

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

+1

Это не работает, попробуйте 'int (" 2100.00 \ r \ n ".strip (string.whitespace +" '"))'. –

+0

Привет привет ... '' 'не существует; исключение показывает 'repr (the_input_string)' –

4

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

>>> 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 

documentation говорит:

If the argument is a string, it must contain a possibly signed decimal number representable as a Python integer, possibly embedded in whitespace.

где определение целочисленного литерала Python можно найти here.

Решение:

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

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

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

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

Преобразование поплавок значение для целых работ (от documentation):

Conversion of floating point numbers to integers truncates (towards zero).

1

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

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

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

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

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

Смежные вопросы