![](/img/trans.png)
[英]How to filter columns within a .CSV file and then save those filtered columns to a new .CSV file in Python?
[英]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.