我有一个格式如下的文本文件:
DEPT FTR RPT_PERIOD
Project Management "68,760.23" 12-Month
Project Management "142,483.33" 12-Month
AEC Administration "37,175.06" 12-Month
我的目标是在引号中提取工资(在FTR栏下),将它们全部加起来并根据部门找到平均值。但是,当我将工资附加到列表中时,它们都是字符串,我无法删除引号以将它们转换为浮点数。这就是我到目前为止所做的,我正在逐步处理代码:
salary_file = open("salaries.txt", "r")
headers = salary_file.readline()
salaries = []
for line in salary_file.readlines():
line.rstrip()
(dept, ftr, rpt_period) = line.split('\t')
salaries.append(ftr)
print salaries
#Sample output: ['"68,760.23"', '"142,483.33"', '"37,175.06"']
我该怎么做才能删除“”引号,以便我可以使用地图将它们转换为浮点数?
答案 0 :(得分:1)
您无法直接将它们转换为浮点数,因为:
float()
无法理解号码中的,
。因此,删除多余的引号和,
>>> salaries = ['"68,760.23"', '"142,483.33"', '"37,175.06"']
>>> [float("".join(x.replace('"', '').split(","))) for x in salaries]
[68760.23, 142483.33, 37175.06]
>>>
但是当你追加到列表时,也许你应该处理这个问题:
with open("salaries.txt", "r") as salary_file:
for line in salary_file:
dept, ftr, rpt_period = line.rstrip().split("\t")
try:
salaries.append(float("".join(ftr.split(",")))
except ValueError:
# Can't convert to float, perhaps it's a comment or the header.
pass
请注意,您必须确保该文件实际上是以制表符分隔的。
答案 1 :(得分:0)
您可以执行以下操作来获取除字符串的第一个和最后一个字符之外的所有内容,然后转换为float,如下所示:
new_salaries = []
for i in salaries:
i = i.replace(",", "")
new_salaries.append(float(i[1:-1]))
print new_salaries
del salaries
您可以执行i[1:-1]
,也可以执行i.replace('"', '')
如果您的字符串为some_string = "abcdefg"
,那么some_string[1:-1]
将返回"bcdef"
i[1:-1]
部分从第二个字符获取字符串(因为索引从0开始)到第二个最后一个字符。然后将其转换为浮点数,然后将其添加到新列表中。然后,您可以删除旧列表。
答案 2 :(得分:0)
>>> salaries = ['"68,760.23"', '"142,483.33"', '"37,175.06"']
>>> s = [ele.replace('"', "") for ele in salaries]
>>> s
['68,760.23', '142,483.33', '37,175.06']
>>> [float(ele.replace(",", ""))for ele in s]
[68760.23, 142483.33, 37175.06]
>>>
答案 3 :(得分:0)
你的问题是,它在字符串中有逗号。这就是为什么在转换之前你需要删除逗号标记。 我能想到的一个班轮是,
float(x.split('"')[1].replace(',',''))
在适当的位置使用此行。
答案 4 :(得分:0)
只需像这样更改代码中的附加内容,您就会获得一个浮动列表:
salary_file = open("salaries.txt", "r")
headers = salary_file.readline()
salaries = []
for line in salary_file.readlines():
line.rstrip()
(dept, ftr, rpt_period) = line.split('\t')
salaries.append(ftr.replace('"', '').replace(',', ''))
print salaries
#Sample output: [68760.23, 142483.33, 37175.06]
或者,如果您只想删除"
和,
以便使用map()
,请参阅@ msvalkon的答案。