英文:
Getting a decimal cast out of a string
问题
这是我在geeks for geeks上找到的用于创建列表的代码:
damages = []
def parse(d):
dictionary = dict()
# 移除花括号并将键值对拆分成列表
pairs = d.strip('{}').split(', ')
for i in pairs:
pair = i.split(': ')
# 移除键值对中的其他符号
dictionary[pair[0].strip('\'\"')] = pair[1].strip('\'\"')
return dictionary
try:
geeky_file = open('TowerA/0-deg-DamagesStates.txt', 'rt')
lines = geeky_file.read().split('\n')
for l in lines:
if l != '':
dictionary = parse(l)
damages.append(dictionary)
geeky_file.close()
except:
print("发生了意外情况!")
但是,为了运行下一个分析方法,"Decimal('0.7180868594')"
必须变为 Decimal('0.7180868594')
,不带外部的字符串引号。
我尝试在def parse
中剥离更多的引号,但没有帮助。有任何想法将不胜感激!
英文:
I am trying to read a txt file into a list of dictionaries, but since some of the entries are casted decimals (which is the output of a function I can't change), when I read them out of the txt file, they are double stringed.
This is the code I am using for creating the list that I found on geeks for geeks:
damages = []
def parse(d):
dictionary = dict()
# Removes curly braces and splits the pairs into a list
pairs = d.strip('{}').split(', ')
for i in pairs:
pair = i.split(': ')
# Other symbols from the key-value pair should be stripped.
dictionary[pair[0].strip('\'\'\"\"\"\"')] = pair[1].strip('\'\'\"\"\'\'')
return dictionary
try:
geeky_file = open('TowerA/0-deg-DamagesStates.txt', 'rt')
lines = geeky_file.read().split('\n')
for l in lines:
if l != '':
dictionary = parse(l)
damages.append(dictionary)
#print(dictionary)
geeky_file.close()
except:
print("Something unexpected occurred!")
One line of the list this makes is:
{'DS_0': "Decimal('0.7180868594')", 'DS_1': '0', 'DS_2': '0', 'DS_3': "Decimal('0.2819131406')"}
But, in order to run the next analysis method, the
"Decimal('0.7180868594')"
, has to be
Decimal('0.7180868594')
without the external string quotation marks.
I tried stripping more of the quotations marks in the def parse, but that didn't help anything.
Any ideas are greatly appreciated!
答案1
得分: 0
你可以手动拼接字符串,如下所示:
if value.startswith("Decimal('") and value.endswith("')"):
value = Decimal(value[9:-2])
在parse
函数中。这是一种相当低效的解决方案,但希望对你的需求足够。
英文:
You can manually splice the string like so:
if value.startswith("Decimal('") and value.endswith("')"):
value = Decimal(value[9:-2])
in parse
. This is a pretty inefficient solution, but it should hopefully suffice for your purposes.
答案2
得分: 0
I am guessing that your 'next analysis method' involves using Decimal from the decimal library module; this takes a number as a string. If so then maybe this is useful:
You could use the eval
function on the whole string:
n = eval("Decimal('0.7180868594')")
However, eval has specific security drawbacks which you can look up.
Better to extract the string and use that:
from decimal import Decimal
import re
s = "Decimal('0.7180868594')"
m = re.search(r"(\d+\.\d+)", s).group(1)
n = Decimal(m)
英文:
I am guessing that your 'next analysis method' involves using Decimal from the decimal library module; this takes a number as a string. If so then maybe this is useful:
You could use the eval
function on the whole string:
n = eval("Decimal('0.7180868594')")
However, eval has specific security drawbacks which you can look up.
Better to extract the string and use that:
from decimal import Decimal
import re
s = "Decimal('0.7180868594')"
m = re.search(r"(\d+\.\d+)", s).group(1)
n = Decimal(m)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论