2009-05-11 13 views
2

私は1列しか持っていないが1500レコードに近いCSVファイルを持っています。CSVファイルからテキストを抽出します

私は11.1を抽出したいと

私は例えば、

「:11.1V、および容量4500mAhサンプル電池は電圧を持っている」、各レコードから情報を抽出したいのですが別のファイルに置く。すなわち、 "voltage:"の後に "V"の前に置く。レコードに「電圧:」がない場合は、空の行を入れたいと思います。

私はLinux環境になっていますが、これを行う最も簡単な方法は何ですか?

+2

ファイルに2つの列が含まれているようです(そこにコンマがあります) –

+0

私はこの権利を得ていますか?そのCSVのすべての行は、あなたが記述した行のように見えますか?だからまず、 'Voltage:'と 'V'が存在するかどうかを確認し、その間の数字を探して別のファイルにエクスポートする必要があります。 – Javier

+1

Assafは、引用符で囲まれた文がカンマを含むことができる文字列であるというCSV規則に従っているかどうかによって異なります。 – simon

答えて

2

Pythonの

import csv 
source = open("myfile.csv", "rb") 
rdr= csv.reader(source) 
for row in rdr: 
    print "The sample battery has a Voltage: %.1fV, and capacity: %dmAh" % (float(row[0]), int(row[1]),) 

あなたはCSVファイルからデータを引っ張って始めるでしょう。


明らかに(コメントに基づいて)ファイルは次のようになります。

"The sample battery has a Voltage: 11.1V, and capacity: 4500mAh" 

これは、1列のCSVである可能性があります。または、ボーナス引用符付きの単一の行。それは1列のCSVのふりをしましょう。

import csv 
import re 
v_pat= re.compile(r' (\d+\.\d+)V') 
mah_pat = re.compile(r' (\d+)mAh') 
source = open("myfile.csv", "rb") 
rdr= csv.reader(source) 
for row in rdr: 
    v_match= v_pat.search(row[0]) 
    mah_match= mah_pat.search(row[0]) 
    if v_match and mah_match: 
     print v_match.group(1), mah_match.group(1) 
    else: 
     print # empty line -- not very informative 

そうかもしれません。

+0

こんにちは、これは私が意図しているのと正反対です。基本的にはショッピングカート(phpMyAdminでエクスポート)からのCSVファイルです。その代わりに番号を抽出したいと思います。 プログラムは "Voltage:"と表示されるたびに、その直後に実数(この場合は浮動小数点)を抽出します。 – segfault

+2

質問を明確にして、この新しい情報を追加してください。 –

2

1つの列のCSVファイルの意味を正確にはわかりません。 1つの列がある場合は、単なるテキストファイルではありませんか?

とにかく、各行は、上記のように見え、我々はこのようなファイルがある場合:

 
bash-3.2$ cat example.txt 
The sample battery has a Voltage: 11.1V, and capacity: 4500mAh 
The sample battery has some other info but no v entry 
The sample battery has a Voltage: 12.1V, and capacity: 4200mAh 

はその後、簡単にこれを実現する正規表現と11.1を取り除くと、このようにインデックスを保持することができます

 
bash-3.2$ sed -e 's/.*Voltage: \([^V]*\)V.*/\1/' -e 's/^The.*//' < example.txt 
11.1 

12.1 

私が電圧を含まない線の形式を誤解している場合は、調整可能です。私の表現はあなたの書式に関して非常に壊れやすく、改善することができます。また、あなたの意図がはっきりしていないので、私は引用を含めなかったことに注意してください。上記のものは、それらと一緒に働くように(少しずつ)調整する必要があります。

関連する問題