簡體   English   中英

Python:如何從網頁中的CSV數據中過濾列?

[英]Python: How to filter columns from a csv data within a webpage?

我當前的實現是:

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)

我想以以下格式打印數據:

//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

但是,實際輸出如下所示:

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

注意: 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循環時,一定有問題。

您正在向csv.reader傳遞字符串。 [或者足夠接近的東西–我不記得.text給出字符串還是bs4的字符串狀對象之一。]它需要一個文件狀對象。 您可以使用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']]

但是你可以

>>> 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']]

請注意,您可能想在文本上調用.strip()來刪除多余的空格,尤其是如果您想使用DictReader這樣就不必記住哪一列是哪一列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM