若是须要读取一行数据以下表1所示,那么须要读取域名下面的数据,便使用以下代码:python
with open('A.csv','rb') as csvfile: reader = csv.reader(csvfile) rows = [row for row in reader]
其中每个row就是一行['121.241.244.92', 'known attacker', '"blocklist.de (+dataplane.org,greensnow.co,rulez.sk,rutgers.edu)"'],对应的row[0]就是121.241.244.92。
那么读取某一列就很容易了,取出每一row里面的第0个元素组成colum,即是下面的语句能够取得第0列 column0 = [row[0] for row in reader]
。
而取得某一行便相对复杂一些,代码以下:正则表达式
import csv with open('A.csv','rb') as csvfile: reader = csv.reader(csvfile) for i,rows in enumerate(reader): if i == 2: row = rows
上面的代码中,运用到了enumerate函数,enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,通常用在 for 循环当中。即对于一个列表中每个元素添加一个索引。经过索引选取对于的行。
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]函数
reader列表
[['121.241.244.92', 'known attacker', '"blocklist.de (+dataplane.org,greensnow.co,rulez.sk,rutgers.edu)"'],
['121.32.150.82', 'known attacker', '"blocklist.de (+dataplane.org,greensnow.co)"'],
['121.33.237.102', 'known attacker', '"blocklist.de (+dataplane.org,greensnow.co,rutgers.edu)"']]code
表1对象
域名 | ||
---|---|---|
121.241.244.92 | known attacker | "blocklist.de (+dataplane.org,greensnow.co,rulez.sk,rutgers.edu)" |
121.32.150.82 | known attacker | "blocklist.de (+dataplane.org,greensnow.co)" |
121.33.237.102 | known attacker | "blocklist.de (+dataplane.org,greensnow.co,rutgers.edu)" |
文件的写入就相对简单不少,只需记得"a+"是追加写入文件、"W"是覆盖写入便可,直接贴出下面的代码:blog
with open("test.csv", "a+") as csvfile: writer = csv.writer(csvfile) writer.writerow(rows)
情景:面对一份上百万的trails.csv文件,以下图所示,如今我须要把第一列的中只含有ip或者是IP:port的那一行读取出来,而且放入新的文件中。
在这就须要使用正则表达式对ip进行匹配,匹配成功输入文件中。匹配IPV4及端口号的正则 \A\d+\.[0-9.]+\Z|\A\d+\.[0-9.]+\:[0-8]+\Z
。这里使用到search语句进行匹配,代码以下:索引
with open("trails.csv", "r", encoding = "utf-8") as f: reader = csv.reader(f) for rows in reader: m = re.search(r"\A\d+\.[0-9.]+\Z|\A\d+\.[0-9.]+\:[0-8]+\Z", rows[0]) if m: with open("test.csv", "a+") as csvfile: writer = csv.writer(csvfile) writer.writerow(rows)