Python导入txt格式化

0 投票
3 回答
1421 浏览
提问于 2025-04-16 11:50

我有一个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 个回答

-1

试试这个:

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

你需要在脚本的开头加上 import string。另外,可以查看这个链接了解更多信息:http://docs.python.org/library/stdtypes.html#str.strip

1

针对你现在遇到的问题,可以参考@Felix Kling的回答。

如果你对将来的问题感兴趣,可以继续往下看。

(1) 这里提到的 \r 在这个特定情况下并不是问题,但很有意思:你是在Windows上创建文件,然后在Linux/OSX等系统上读取吗?如果是这样,建议你用“rU”模式打开文本文件,这样在Python中读取的每一行就只有 \n 了。

(2) 不管怎样,做 line = line.rstrip('\n') 是个很好的主意……否则,根据你如何分割行,最后一段可能会多出一个不需要的 \n

(3) 你可能更喜欢直接使用 xlrd 从Excel文件中读取数据——这样可以省去很多麻烦。[免责声明]:我是xlrd的作者。

4

我们把这个当作一个答案来讲。问题不在于 \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

将浮点数转换为整数是可行的(来自文档):

将浮点数转换为整数时,会向零截断。

撰写回答