2013-04-22 3 views
0

내 현재의 구현은 다음과 같습니다Python : 웹 페이지 내에서 CSV 데이터의 열을 필터링하는 방법은 무엇입니까?

import csv 
import urllib.request 
from bs4 import BeautifulSoup 
f=urllib.request.urlopen('<my_url_goes_here>') 
soup = BeautifulSoup(f.read()) 
my_csv = csv.reader(soup.pre.text,delimiter=",") 
for row in my_csv: 
    print(row) 

나는 다음과 같은 형식으로 내 데이터를 인쇄하려면 :

['c'] 
['f'] 
['m'] 
['e'] 
['q'] 
['d'] 
['e'] 
['q'] 
['u'] 
['e'] 
['u'] 
['e'] 

참고 :

//datestamp,SvcName,AvgSvcTime,MinSvcTime,MaxSvcTime,SvcVol 
2013-03-19 00:00:00,cfmeqdequeue,1,0,10,198 
2013-03-19 00:01:00,cfmeqdequeue,1,0,10,198 
2013-03-19 00:02:00,cfmeqdequeue,1,0,10,198 

그러나 실제 출력은 다음과 같습니다 : soup.pre.text은 다음을 인쇄하고 적절한 줄 바꿈을합니다.

'\n//datestamp,SvcName,AvgSvcTime,MinSvcTime,MaxSvcTime,SvcVol\n2013-03-19 00:00:00,cfmeqdequeue,1,0,10,198\n2013-03-19 00:01:00,cfmeqdequeue,1,0,10,198\n 

그래서 csv.reader() 또는 for 루프를 사용할 때 뭔가 잘못되어야합니다.

+0

csv.reader 함수는 ** 구분 기호 (귀하의 경우 해당 쉼표)를 나타내는 매개 변수를 받아들이고 구분 기호를 사용하여 CSV를 구문 분석하여 문제를 해결해야합니다. 도움말 http : //docs.python 문서를 참조하십시오. org/2/library/csv.html –

+0

구분 기호 매개 변수가 추가되었습니다. 현재의 문제를 완전히 수정 한 질문. – imagineerThat

답변

1

문자열을 csv.reader으로 전달 중입니다. [아니면 충분히 가까이에 - .text 문자열 또는 bs4의 stringlike 개체 중 하나를 제공하는 경우 기억이 안나요.] filelike 개체가 필요합니다. StringIO 모듈을 사용하면이 문제를 해결하는 파일처럼 동작하는 문자열을 얻을 수 있습니다. 예를 들어,

>>> import csv 
>>> s = '\n//datestamp,SvcName,AvgSvcTime,MinSvcTime,MaxSvcTime,SvcVol\n2013-03-19 00:00:00,cfmeqdequeue,1,0,10,198\n2013-03-19 00:01:00,cfmeqdequeue,1,0,10,198\n' 
>>> list(csv.reader(s))[:5] 
[[], ['/'], ['/'], ['d'], ['a']] 

을 가지고 있지만 당신은 그래서 당신은 '돈 DictReader를 사용하려면 특히, 당신은 여분의 공백을 제거하기 위해 텍스트에 .strip()를 호출 할 수 있습니다

>>> from StringIO import StringIO 
>>> list(csv.reader(StringIO(s)))[:5] 
[[], ['//datestamp', 'SvcName', 'AvgSvcTime', 'MinSvcTime', 'MaxSvcTime', 'SvcVol'], ['2013-03-19 00:00:00', 'cfmeqdequeue', '1', '0', '10', '198'], ['2013-03-19 00:01:00', 'cfmeqdequeue', '1', '0', '10', '198']] 

주를 가질 수 어떤 열이 어떤 것인지 기억해야합니다.

관련 문제