【问题标题】:ValueError: invalid literal for int() with base 10: [duplicate]ValueError:以 10 为底的 int() 的无效文字:[重复]
【发布时间】:2016-06-06 16:32:24
【问题描述】:

我有一本字典“项目”:

>>> item["value"]
Out[2]: u'$26,420'

我想把它转换成整数

26420

加载到数据库中。到目前为止,我已经尝试过:

Out[2]: u'$26,420'
>>> item["value"][1:]
Out[3]: u'26,420'
>>> int(item["value"][1:])
Traceback (most recent call last):
  File "F:\envs\virtalenvs\teat\lib\site-packages\IPython\core\interactiveshell.py", line 2885, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-4-cd6c9e68ae50>", line 1, in <module>
    int(item["value"][1:])
ValueError: invalid literal for int() with base 10: '26,420'

最好的pythonic方法是什么?

【问题讨论】:

  • int(re.sub("[^0-9]","",my_text)
  • 区域设置是否存在问题(逗号与点等)?小数呢?
  • 很高兴你问到小数。这个案子没有,但我想知道如何处理。

标签: python


【解决方案1】:

去掉所有非数字字符:

>>> s = '$26,420'
>>> s = ''.join(c for c in s if c.isnumeric())
>>> int(s)
26420

【讨论】:

  • 感谢 John 是“c for c in s if c.isnumeric()”的理解吗?我想阅读更多关于此的内容。
  • 是的——它是一种理解(以生成器表达式而不是列表理解的形式——注意没有方括号)。在我看来,正是这些东西让 Python 真正闪耀。学习它们的一个好方法是阅读 Stack Overflow 上的 Python 问题。每天你都会在答案中看到至少十几个例子。
【解决方案2】:
some_amount = "$12,345"
some_amount = int(some_amount.split("$")[1].replace(",", ""))
print some_amount #Will return 12345 as an int

【讨论】:

  • 非常感谢
  • 没问题!随时!
【解决方案3】:

您可以将两个简单的替换链接在一起:

cur = int(cur.replace("$", "").replace(",", ""))

【讨论】:

  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 2018-09-09
  • 2020-01-04
  • 2010-12-22
  • 2011-07-07
  • 2019-10-14
相关资源
最近更新 更多