2016-11-13 10 views
-2

私はA067,A002,A104のようなテキスト値を持つスプレッドシートを持っています。これを行う最も効率的な方法は何ですか?今、私は次のことをやっている:Pythonで文字列を整数に変換する最も良い方法

str = 'A067' 
str = str.replace('A','') 
n = int(str) 
print n 
+0

文字は常にAですか?形式は常に同一で、1文字の後に3桁が続くのでしょうか? –

+0

パターンとは何ですか?あなたはいつ有効な整数を抽出できると感じますか? 'Foo 42 Bar 81'には1つまたは2つの整数が含まれていますか? –

+0

文字が常に「A」であるかどうかはわかりません。私はそれが常に3桁であることを確信することができませんが、私の推測は、それは私が持っているデータに基づいているということです。 – MoreScratch

答えて

0

入力の唯一の非番号の部分は最速の方法は、おそらく文字列をスライスするだろう、最初の文字になる場合:

s = 'A067' 
n = int(s[1:]) 
print n 

あなたはと考えている場合文字列ごとに複数の数値を見つけることもできますが、上記の正規表現の答えはおそらく扱いやすくなります。

+0

ありがとうございます。これは私の状況では完全に機能します。 – MoreScratch

1

あなたのデータに応じて、次は、適切な次のようになります。

import string 

print int('A067'.strip(string.ascii_letters)) 

Pythonのstrip()コマンドは、開始と終了から削除する文字のリストを取り文字列。 string.ascii_lettersを渡すことで、文字列の前後の文字が削除されます。

0

正規表現を使用して数字を見つけることができます。

import re 

s = 'A067' 
s = re.findall(r'\d+', s) # This will find all numbers in the string 
n = int(s[0]) # This will get the first number. Note: If no numbers will throw exception. A simple check can avoid this 
print n 

ここでのfindAllのいくつかの例の出力は、あなたが再モジュールから正規表現の置き換え方法を使用することができます別の文字列で

>>> a = re.findall(r'\d+', 'A067') 
>>> a 
['067'] 
>>> a = re.findall(r'\d+', 'A067 B67') 
>>> a 
['067', '67'] 
0

です。

import re 
regex = re.compile("(?P<numbers>.*?\d+") 
matcher = regex.search(line) 
if matcher: 
    numbers = int(matcher.groupdict()["numbers"] #this will give you the numbers from the captured group 
0
import string 

str = 'A067' 
print (int(str.strip(string.ascii_letters))) 
関連する問題