2016-12-06 6 views
-1

pythonスクリプトの作成に問題があります。特に、私は数字の文字列を持っていて、 "0"という単語を整数0で置き換えたいと思います。この文字列を浮動小数点値に変換したいと考えています。私はdata.replaceを使用したので、0の周りに ""置く必要がありました。そうでなければ、文字バッファオブジェクトを期待しているのでエラーがあります。浮動小数点数に変換する前に0からストリップすることができます。文字列を浮動小数点に変換する際のエラー

> for data in inFile: 
> data = data.replace ("zero", "0") 

> data = map(float,data.strip('"'))                

ValueError: could not convert string to float: s

これは、値のリストにとり大きなスクリプトの一部です。

C8098283  1  8268 asx1.1_ox1.0.loc.00001 .  + zero zero zero 11.701 12.801 13.91 

感謝

P.S.:私は私の入力ファイルは、次のようになります。最初の100

inFile = gzip.open('path','rb') 

inpNorm = 0.5 
samNorm = 1 

inFile.next() 
for line in inFile: 
     cols = line.strip().split('\t') 
     data = cols[6:] 
     for data in inFile: 
       data = data.replace("zero",0) 
     data = map(float,data.strip('"')) 

     inputVals = [x * inpNorm for x in data[:100]] 
     h3k27Vals = [x * samNorm for x in data[100:]] 

     normVals = [h327Vals[i] - inputVals[i] for i in len(inputVals)] 

     print '\t'.join(cols[:6]) + '\t'.join(map(str,normVals)) 

inFile.close() 

から与えられた行のために、このリストの最後の100の値を減算したいですこれが十分に明白でない場合、本当にごめんなさい。プログラミングやスタックのオーバーフローにはまったく新しいものです。

+2

例を表示 –

+0

データファイルに浮遊文字があるようです。 – Iluvatar

+0

変換をより明確にすることはできますか?あなたは '' 'を取り除く必要があります –

答えて

0

ここにいくつかの提案があります。

line = "8268 asx1.1_ox1.0.loc.00001 .  + zero zero zero 11.701 12.801 13.91" 
print("Input: '{}'".format(line)) 

converted_line = "0".join(line.split('zero')) # Split the line where you have 'zero' and rebuild the string with '0' 
print("Converted line: '{}'".format(converted_line)) 

あなたは値を変換したかったとお伝えしました。行には2つの非浮動小数点数の項目がありますが、最後の6つの値は興味深いようです。 (すなわちdata = map(float, converted ...))あなたが同様に配列に格納することができ、もちろん

v1, v2, v3, v4, v5, v6 = map(float, converted_line.rstrip().split()[4:]) 
# .split() with no argument splits on whitespace 
# .rstrip() is to remove trailing '\n' (newlines), which are common when parsing files 
print("Data:", v1, v2, v3, v4, v5, v6) 

:私は通常で値を展開します。一緒にそれをすべて実行すると、あなたの実際の問題に対処するために、また出力

Input: '8268 asx1.1_ox1.0.loc.00001 .  + zero zero zero 11.701 12.801 13.91' 
Converted line: '8268 asx1.1_ox1.0.loc.00001 .  + 0 0 0 11.701 12.801 13.91' 
Data: 0.0 0.0 0.0 11.701 12.801 13.91 

が得られます。今すぐ、ファイル内の別の場所(つまり、0 -> 100, 1 -> 101, 2 -> 102などに行きたい)から読み込みたいとします。これは少し煩雑で、効率的ではありません。あなたのファイルサイズがそれほど大きくない場合は(おそらく< 1M行か何か)、ファイル全体を読み込み、計算して、データで何をしたいかをお勧めします。

col1 = [] 
col2 = [] 
... 

for line in file.readlines(): 
    v1, v2, ... = map(float, converted_line.rstrip().split()[...]) 
    col1.append(v1) 
    col2.append(v2) 
    ... 

# Now do your data manipulation of the parsed data that you find in `col1`, `col2`, etc 
関連する問題