0

次の方法で給与情報を含む文字列があります。

salaryMixed = "£25,000 - £30,000"

時々、次のようになります。

salaryMixed = "EUR25,000 - EUR30,000"

また、次のような場合もあります。

salaryMixed = "£37.50 - £50.00"

私がやりたいことは、数値以外のすべての文字を削除し、2 つの値を分割して、低いバンディングと高いバンディングを反映するそれぞれの変数に配置することです。これまでのところ、私は持っています:

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しかし、2つの値を分割する方法と、年収ではなく、浮動小数点数ではない場合のように時給である場合の小数点の処理方法に困惑していsalaryMixed = "£37.50 - £50.00"ますか?

この情報を後でコードの MySQL DB に保存したいのですが、テーブルを次のように記述しました。

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 )
);

ここで最善のアプローチは何ですか?ありがとう。

4

3 に答える 3

1

私がやりたいことは、数値以外のすべての文字を削除し、2 つの値を分割して、低いバンディングと高いバンディングを反映するそれぞれの変数に配置することです。これまでのところ、私は持っています:

わかりました、一度にこれを一歩ずつ進めてください。数値以外のすべての文字を削除します (スペースとピリオドも保持することをお勧めします)

>>> 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']]

float に変換します (Decimal の方が良いかもしれません)

>>> 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によって提案された正規表現は、それを行うための簡単/怠惰な方法です

于 2013-06-12T04:08:37.310 に答える
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])

ここでは、通貨の種類と高い/低い数値をタプルとして返しています。テーブルに簡単に展開できます。

于 2013-06-12T04:35:39.577 に答える
0

値を db に保存するには、Python で MySQLdb ライブラリを使用できます。使いやすく、すべてのデータをデータベースに保存します。ここでそれをチェックしてください。

apt-get install python-mysqldb でインストールできます

于 2013-06-12T04:23:50.913 に答える