我有一个字符串,其中包含以下列方式的工资信息:
salaryMixed = "£25,000 - £30,000"
有时会看起来像这样:
salaryMixed = "EUR25,000 - EUR30,000"
其他时间是这样的:
salaryMixed = "£37.50 - £50.00"
我想要做的是删除除数字值之外的所有字符,然后将这两个值分开,以便将它们放入各自的变量中,以反映低条带和高条带。到目前为止,我有:
if salaryMixed.find('£')!=-1: # found £ char
salaryMixed = salaryMixed.replace("£", "")
if salaryMixed.find('-')!=-1: # found hyphen
salaryMixed = salaryMixed.replace("-", "")
if salaryMixed.find(',')!=-1: # found comma
salaryMixed = salaryMixed.replace(",", "")
if salaryMixed.find('EUR')!=-1: # found EUR
salaryMixed = salaryMixed.replace("EUR", "")
salaryMixed = re.sub('\s{2,}', ' ', salaryMixed) # to remove multiple space
if len(salaryList) == 1:
salaryLow = map(int, 0) in salaryList
salaryHigh = 00000
else:
salaryLow = int(salaryList.index(1))
salaryHigh = int(salaryList.index(2))
但我很难理解如何将两个值分开,以及当salaryMixed
不是年薪时如何处理小数点,而不是像salaryMixed = "£37.50 - £50.00"
那样每小时处理小数点因为不是那个漂浮物吗?
我希望稍后在代码中将此信息存储在MySQL数据库中,但我将该表描述为:
CREATE TABLE jobs(
job_id INT NOT NULL AUTO_INCREMENT,
job_title VARCHAR(300) NOT NULL,
job_salary_low INT(25),
job_salary_high INT(25),
PRIMARY KEY ( job_id )
);
这里最好的方法是什么?感谢。
答案 0 :(得分:1)
我想要删除除数字值之外的所有字符 然后拆分这两个值,以便将它们放入自己的值中 反映低带和高带的相应变量。至今 我有:
好的,一步一步。删除所有字符,但删除数值(更好地保留空格和句点)
>>> testcases = ["£25,000 - £30,000", "EUR25,000 - EUR30,000", "£37.50 - £50.00"]
>>> res = [''.join(x for x in tc if x.isdigit() or x.isspace() or x == '.') for tc in testcases]
>>> res
['25000 30000', '25000 30000', '37.50 50.00']
好的,现在将它们分开
>>> res = [x.split() for x in res]
>>> res
[['25000', '30000'], ['25000', '30000'], ['37.50', '50.00']]
转换为浮点数(十进制可能更好)
>>> res = [[float(j) for j in i] for i in res]>>> res
[[25000.0, 30000.0], [25000.0, 30000.0], [37.5, 50.0]]
加入单独的变量
>>> for low, high in res:
... print (low, high)
...
25000.0 30000.0
25000.0 30000.0
37.5 50.0
@patashu建议的正则表达式是通过执行此操作的简单/懒惰方式
答案 1 :(得分:1)
这是来自python re模块的正则表达式的一个很好的例子。并且您可能希望将每小时费率上调至年度(假设您每小时平均一次
)import re
def salary_band(val):
currency = 'EUR' if 'EUR' in val else 'GBP'
numbers = re.findall("[0-9.\,]*", val) # this will have a bunch of empty entries and two numbers
numbers = [i.replace(",","") for i in numbers if i] # filter out empty strings, remove commas
numbers = map(float, numbers) # convert to floats
annual = lambda p: int(p) if p > 2000 else int( p * 1800) # your number here...
return currency, map(annual, numbers)
print salary_band ( "gbp37.50 - gbp50.00")
print salary_band ( "EUR25,000 - EUR30,000")
>> ('GBP', [75000, 100000])
>> ('EUR', [25000, 30000])
这里我将货币类型和高/低数字作为元组返回 - 您可以轻松地将其打包到表中
答案 2 :(得分:0)
用于在db中存储值,您可以在python中使用MySQLdb库。它易于使用,并将您的数据存储到数据库中。 Here检查一下。
您可以通过apt-get install python-mysqldb
安装它