2017-07-31 5 views
-1

Iは、CSVファイル内の複数の行を有し、各 `ラインは私が値を交換する必要があり、この抽出値

0.10089;0;0;1;0;0;0;0;0;0;-0.9;-0.35;999999;0;0;0;80;81.226;158.25;0; 

ように見える-0.9-0.35そして9999992*ことにより、これらの値は、-0.9-1.8なり...

は、私はすべてのline

に表示されるすべてのセミコロンのインデックスを格納する配列、 sc_pos_arrayを宣言しています

sc_pos_array = [i for i,x in enumerate(line) if x == ';']

私は値0.910thセミコロンの後に起こることを知っている、と私はsc_pos_array[9]から10thセミコロンのインデックスを知っています。 0.9にアクセスするには、私はその後

​​

を書くが、これは動作するようには思えません。次のコードは、値-0.9を置き換え、バック文字列にその2倍の値をsubstitues

line[sc_pos_array[9]+1 : sc_pos_array[10]] 

:私は、値0.9にアクセスするには、次のforループ

with fileinput.input(inplace=True) as f: for line in f: ...

+0

"機能していない"とはどういう意味かはっきりしませんが、あなたのアプローチを変更することを強くお勧めします。 'csv'モジュールのような既存のツールを使う方がはるかに簡単です。 –

答えて

0

内のすべてのこれをやっています:

line = line[0:sc_pos_array[9] + 1] + str(2 * float(line[sc_pos_array[9]+1 : sc_pos_array[10]])) + line[sc_pos_array[10]:] 
print line 

従って出力される。

'0.10089;0;0;1;0;0;0;0;0;0-1.8;-0.35;999999;0;0;0;80;81.226;158.25;0;' 
+0

ありがとう!それはほとんどの部分で機能しますが、-1.8の代わりに0-1.8を表示します。 –

+0

@AnandDwivediあなたは正しいです。私は解決策を更新しました。 9位を獲得するには ';'あなたはi + 1番目のインデックスに行く必要があります。 –

+0

今は 'python3 script.py file.csv'を使ってスクリプトを実行しています。私は 'argparse'を使って、(2を明示的に使用するのではなく)乗算したい数値をユーザに尋ねるようにしていました。 'ap.add_argument(" -m "、" --multiplier "、required = True、help = args = vars(ap.parse_args()) 'を使用し、' 2'の代わりに 'args [" multiplier "]'を使用しますが、これは見えません –