Python导入txt格式化
我有一个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: invalid literal for int() with base 10: '2100.00\r\n'
我该如何去掉'
和\r\n'
这些东西呢?
我的最终目标是想在数字旁边再加一列,比如如果这个数字是145的话,
145, '100-199'
167, '100-199'
1167, '1100-1199'
我想要得到那种输出。
3 个回答
试试这个:
number = int(number.strip(string.whitespace + "'"))
你需要在脚本的开头加上 import string
。另外,可以查看这个链接了解更多信息:http://docs.python.org/library/stdtypes.html#str.strip
针对你现在遇到的问题,可以参考@Felix Kling的回答。
如果你对将来的问题感兴趣,可以继续往下看。
(1) 这里提到的 \r
在这个特定情况下并不是问题,但很有意思:你是在Windows上创建文件,然后在Linux/OSX等系统上读取吗?如果是这样,建议你用“rU”模式打开文本文件,这样在Python中读取的每一行就只有 \n
了。
(2) 不管怎样,做 line = line.rstrip('\n')
是个很好的主意……否则,根据你如何分割行,最后一段可能会多出一个不需要的 \n
。
(3) 你可能更喜欢直接使用 xlrd 从Excel文件中读取数据——这样可以省去很多麻烦。[免责声明]:我是xlrd的作者。
我们把这个当作一个答案来讲。问题不在于 \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
将浮点数转换为整数是可行的(来自文档):
将浮点数转换为整数时,会向零截断。