2009-05-11 12 views
2

1 열만 있지만 거의 1500 레코드가있는 CSV 파일이 있습니다.CSV 파일에서 텍스트 추출

나는 11.1을 추출하고 싶습니다과

나는 예를 들어,

": 11.1V, 용량 4500mAh 샘플 배터리가 전압을 갖고"각 레코드에서 정보를 추출하고 싶습니다 다른 파일에 놓습니다 (예 : "voltage :"다음, "V"앞에). 레코드에 "voltage :"가 없으면 빈 줄을 넣고 싶습니다.

저는 리눅스 환경에서 가장 쉬운 방법은 무엇입니까?

+2

파일에 두 개의 열이 포함되어있는 것 같습니다 (쉼표가 있음) –

+0

이 권리를 얻을 수 있습니까? 해당 CSV의 모든 회선이 설명 된 것과 같습니다. 먼저 '전압 :'과 'V'가 존재하는지 확인한 다음 그 사이의 숫자를 찾아 다른 파일로 내 보내야합니다. – Javier

+1

Assaf는 따옴표로 묶은 명령문이 쉼표를 포함 할 수있는 문자열보다 – simon

답변

2

파이썬은 CSV 파일에서 데이터를 끌어와 함께 시작하는 것

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]),) 

.


분명히 (주석에 기초하여) 파일은 다음과 같이 보입니다.

"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

인 CSV 규칙을 따르는 지 여부에 따라 달라집니다. 안녕하세요, 이는 의도 한 것과 정확히 반대입니다. 기본적으로 phpMyAdmin으로 내 보낸 장바구니의 CSV 파일이므로 대신 번호를 추출하고 싶습니다. 프로그램이 "Voltage :"를 볼 때마다, 그 직후에 실수 (이 경우에는 부동 소수점)를 추출합니다. – segfault

+2

질문을 명확히하여이 새로운 정보를 포함하십시오. –

2

단일 열 CSV 파일의 의미를 정확히 모르겠습니다. 단일 열이있는 경우 텍스트 파일이 아닌가요?

어쨌든, 각 라인 위처럼 보이는 우리는이 같은 파일이있는 경우 :

 
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 

이 그럼 당신은 쉽게 달성 regexp와 함께 11.1을 제거하고이 등으로 색인을 유지할 수 :

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

12.1 

전압이 포함되지 않은 선의 형식을 잘못 이해하면 조정할 수 있습니다. 제 표현식은 서식 설정과 관련하여 매우 약해서 개선 될 수 있습니다. 또한 귀하의 의도가 불분명하기 때문에 인용문을 포함하지 않았습니다. 위와 같은 작업을 조정할 필요가 있습니다.