.strip不会删除Python3程序中的最后一个引号

2024-10-03 23:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:更新,所以我用@Alex Thornton的建议运行了这个。在

这是我的输出:

'100.00"\r'
Traceback (most recent call last):
  File "budget.py", line 48, in <module>
    Main()
  File "budget.py", line 44, in Main
    budget = readBudget("budget.txt")
  File "budget.py", line 21, in readBudget
    p_value = float(maxamount)
ValueError: invalid literal for float(): 100.00"

不过,在Windows下,我只得到数字列表,其中的数量和。在

现在,我不太了解Windows和Linux处理文本文件的方式,但这不是因为Windows和Linux处理return/enter键的方式吗?在

所以我有这个代码:

^{pr2}$

从该文件读取:

"Type", "MaxAmount"
"SCHOOL","$100.00"
"UTILITIES","$200.00"
"AUTO", "$100.00"
"RENT", "$600.00"
"MEALS", "$300.00"
"RECREATION", "$100.00"

它应该提取预算类型(学校、公用事业等)和最大金额。最大金额应该转换成浮动。但是,当我运行程序时,我得到了这个错误。在

Traceback (most recent call last):
  File "budget.py", line 47, in <module>
    Main()
  File "budget.py", line 43, in Main
    budget = readBudget("budget.txt")
  File "budget.py", line 22, in readBudget
    entry = {'exptype':exptype, 'maxamnt':float(maxamount)}
ValueError: invalid literal for float(): 100.00"

readBudget中的strip函数不应该删除最后一个引号吗?在


Tags: inpymostmainwindowslinecallfloat
3条回答

当我尝试这个:

>>> attempt = '"$100.00"'
>>> new = attempt.strip('$" \n')
'100.00'
>>> float(new)
100.00

我得到了人们所期望的结果,所以这一定是和我们从文件中看不到的东西有关。从您发布的内容来看,您试图传递给float()的字符串是否有细微的错误(因为它看起来非常合理)。尝试添加调试print语句:

^{pr2}$

然后您就可以确切地确定传递给float()的内容。对repr()的调用将使通常不可见的字符可见。将结果添加到您的问题中,我们将能够进一步评论。在


编辑:

在这种情况下,更换:

maxamount = list[1].strip('$" \n')

有:

maxamount = list[1].strip('$" \n\r')

那样的话,效果会很好。在

加上这个:

maxamount = list[1].strip('$" \n\r')

或者更具体地说,删除了错误。在

可以使用正则表达式捕获字符串中的全部或大部分浮点信息。在

考虑:

import re

valid='''\
123.45"
123.
123"
.123
123e-16
-123e16
123e45
+123.45'''

invalid='''\
12"34
12f45
e123'''

pat=r'(?:^|\s)([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)'

for e in [valid, invalid]:
    print
    for line in e.splitlines():
        m=re.search(pat, line)
        if m:
            print '"{}" -> {} -> {}'.format(line, m.group(1), float(m.group(1)))
        else:
            print '"{}" not valid'.format(line)  

印刷品:

^{pr2}$

只需修改regex以捕获您认为有效或无效的浮点数据点。在

相关问题 更多 >