2017-08-09 12 views
0

に数字を見つける:は、私は次の内容のファイルを持っているテキスト

&ACCESS RVP1 
&REL 3 
&PARAM DISKPATH = KRC:\R1\Program\new 
DEF SETUP_WELD() 
;call LASER_EN(); 

$out[27]=false; START=OFF 
$out[26]=false; STROBE=OFF 
$out[25]=false; SELECT 8=OFF 
$out[24]=false; SELECT 7 =OFF 
$out[23]=false; SELECT 6 =OFF 
$out[22]=false; SELECT 5 =OFF 
$out[21]=false; SELECT 4 =OFF 
$out[20]=false; SELECT 3 =OFF 
$out[19]=false; SELECT 2 =OFF 
$out[18]=false; SELECT 1 =OFF 
$out[17]=false; SELECT 0 =OFF 
$out[28]=true; ENABLE=ON 

END 

を私はそのカッコ内の[]は、値を見つけ、配列にそれを記述する必要があります。 結果では、私は次の結果を取得する必要があります:

[ '27', '26','25','24','23','22','21','20','19','18','17','28'] 

は、私は、Pythonを使ってそれをしなければなりません。私はこれでかなり新しいです、それを行うための最も適切な方法は何ですか?

私の考えでは、このようなものだった:私は配列にファイルを読み込み、そして私は、配列の要素に検索を使用して考えていた:

def reading(): 
    with open ('Setup_Weld.src') as f: 
     array1=[row.strip() for row in f] 

しかし、私は要素に検索する方法がわかりません配列の。

UPD:答えが見つかりました。作業コードは次のとおりです。

def reading(): 
    with open ('Setup_Weld.src') as f: 
     stripped=[row.strip() for row in f] 
     setup_weld_num = [re.search(r'\[(.*?)\]',i).group(1) for i in stripped if re.search(r'\[(.*?)\]',i)] 
     print(setup_weld_num) 
reading() 
+4

正規表現は、いくつかのGoogle検索でのオプションです。試したコードを私たちに教えてください。 –

+0

@Acapulkaあなたの変更は、質問をかなり複雑にし、既存の回答を無効にしました。これらの変更を元に戻すことを検討し、新たな質問を始めるには余分な行を処理する方法がわかりません。 – perigon

答えて

0

トライ正規表現、これはあなたが望むものを、ここで

import re 
def reading(): 
    with open ('Setup_Weld.src') as f: 
     stripped=[row.strip() for row in f] 
     my_num_list = [re.search(br'\[(.*?)\]',i).group(1) for i in stripped if re.search(br'\[(.*?)\]',i)] 
     print(my_num_list) 
reading()   

のpython3出力、

[email protected]:~/Desktop$ python3 run.py 
[b'27', b'26', b'25', b'24', b'23', b'22', b'21', b'20', b'19', b'18', b'17', b'28'] 
[email protected]:~/Desktop$ 

は私出力されます、

here is my output,

+0

あなたのコードを試しましたが、それは私のエラーを返します:TypeError:バイトのようなオブジェクトに文字列パターンを使用することはできません。私が開いているファイルは.txtではありませんが、これは問題ではないと思いますか? – Acapulka

+1

@Acapulkaパターンに 'b'を付け加えてください:' br '\ [(。*?)\]' ' –

+0

あなたはPython 3を使っているようですので、@DanDのように2つの変更を行います。 f.readlines()のiの.group(1) print(my_num_list) –

0

正規表現

import re 
with open(file_name) as file_object: 
    data=file_object.read().replace('\n', '') 
    re.findall(r"\[(.*?)\]",data) 
使用
+0

良い答えです。 .readlines()の代わりに.readlines()を試すことができますので、 '\ n'を気にする必要はありません。 –

+0

.readlines()はリストにデータを与えます。これで私は文字列でデータを取得したい。 @MohideenibnMohammed –

+0

これはいくつかの説明を使用する可能性があります – maestromusica

0

フォーマットはとてもシンプルなので、あなただけのPythonの文字列メソッドを使用して、正規表現せずにこれを行うことができます。

def reading(): 
    with open ('Setup_Weld.src') as f: 
     array1=[row.strip() for row in f] 
     return [line[5:].split(']')[0] for line in array1] 

これにより、各行の最初の4文字が削除され、閉じ括弧の前にその部分が保持されます。

出力:

['27', '26', '25', '24', '23', '22', '21', '20', '19', '18', '17', '28'] 
+0

はうまくいっているようですが、何か変です。私はこれを使用しました:def read(): open( 'Setup_Weld.src')f: array1 = [fの行の[row.strip()] result = [line [5:]。split( ') ')[0] for array1] print(結果)と次の出力を得た: – Acapulka

+0

[' SS RVP1 '、' 3 '、' M DISKPATH = KRC:\\ R1 \\ Program \\ new '、' ETUP_WELD 「26」、「25」、「24」、「23」、「22」、「21」、「20」、「19」、 '08 '、'17'、'28 '、' '、' '] – Acapulka

+0

これはすべての行を検索します..正規表現はよりよい解決策になります... OPは特定の行を確認したいです –

関連する問題