1. 基础语句

1.1 文件的读取

如果需要读取一行数据如下表1所示,那么需要读取域名下面的数据,便使用如下代码:

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

表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)"

1.2 文件的写入

文件的写入就相对简单很多,只需记得"a+"是追加写入文件、"W"是覆盖写入即可,直接贴出下面的代码:

with open("test.csv", "a+") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(rows)

2. 在工程中的运用

情景:面对一份上百万的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)

参考文献

[1]风景不在对岸wj.Python 读取csv的某行[EB/OL].https://blog.csdn.net/u011089523/article/details/52372962,2016-08-30.

[2]test_soy.Python 读取csv的某列[EB/OL].https://blog.csdn.net/test_soy/article/details/79718458?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control,2018-03-27.

python3处理csv文件的更多相关文章

  1. 用python3读csv文件出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

    1.python3读取csv文件时报如下图所示的错误 2.分析原因:读取的csv文件不是 UTF8 编码的,而IDE工具默认采用 UTF8 解码.解决方法是修改源文件的解码方式. 3.使用nodepa ...

  2. python3读写csv文件

    python读取CSV文件   python中有一个读写csv文件的包,直接import csv即可.利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下. 1. 读文件 csv_ ...

  3. 用python3读CSV文件,出现UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid con

    使用pd.read_csv()读csv文件时,出现如下错误: UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xd0 in position ...

  4. python3写入csv文件时中文为乱码

    今天修改李万的爬虫时把页面上的中文写入csv文件时,中文总是乱码.通过上网搜索得到解决.解决的办法是打开文件是需加参数 encoding='utf-8-sig' .感谢博客园的菜鸟Alex.他相关博客 ...

  5. python3 写CSV文件多一个空行的解决办法

    Python文档中有提到: open('eggs.csv', newline='') 也就是说,打开文件的时候多指定一个参数.Python文档中也有这样的示例: import csvwith open ...

  6. 【学习笔记】python3中csv文件使用

    1. reader=csv.reader(f, delimiter=','):按行读取数据,reader为生成器,读取的每行数据为列表格式,可以通过delimiter参数指定分隔符. import c ...

  7. python3读取csv文件

    代码如下 import csv with open('D:\\abc\\userinfo.csv',newline='') as f: reader = csv.reader(f) for row i ...

  8. python3使用csv模块读写csv文件

    python3使用csv模块读写csv文件 读取csv文件: import csv #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() ...

  9. python3 简单实现从csv文件中读取内容,并对内容进行分类统计

    新手python刚刚上路,在实际工作中遇到如题所示的问题,尝试使用python3简单实现如下,欢迎高手前来优化import csv #打开文件,用with打开可以不用去特意关闭file了,python ...

随机推荐

  1. ERP仓库管理的操作与设计--开源软件诞生20

    赤龙ERP库房管理讲解--第20篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon/r ...

  2. Spring Cloud Alibaba Sentinel

    一.介绍(sentinel 1.7.0) 1,官网地址 https://github.com/alibaba/Sentinel 中文地址:https://github.com/alibaba/Sent ...

  3. Vue基础(2)

    fetch与axios请求数据 fetch基本语法: fetch(url,{parmas}).then(res=> res.json()  //返回promise对象 ).then(data=& ...

  4. H5头部内容

    <head> <meta charset="utf-8"> <title>口袋小鼠</title> <meta name=&q ...

  5. 面试官:看你简历说写精通ThreadLocal,这几道题你都会吗?

    问题 和Synchronized的区别 存储在jvm的哪个区域 真的只是当前线程可见吗 会导致内存泄漏么 为什么用Entry数组而不是Entry对象 你学习的开源框架哪些用到了ThreadLocal ...

  6. SP1772 Find The Determinant II

    题意 \(T\) 组数据,每组给定两个整数 \(n,k\),求 \(\det A\),其中 \(A\) 为一个 \(n\times n\) 的矩阵且 \(A_{i,j}=\gcd(i,j)^k\),对 ...

  7. 正式班D20

    2020.11.02星期五 正式班D20 目录 11 软件包管理 11.1 软件包介绍 11.1.1 编程语言分类 11.1.2 三种安装包 11.2 rpm包管理 11.2.1 rpm包简介 11. ...

  8. 【Java GC系列】垃圾收集简介(1)

    说明: 在本文中, Garbage Collection 翻译为 "垃圾收集", garbage collector 翻译为 "垃圾收集器"; 一般认为, 垃圾 ...

  9. DP百题练索引

    就是一篇还在咕的文章 DP百题练(一) DP百题练(二) DP百题练(三)

  10. jetson-reference编译出现的问题记录

    问题一: 显示gcc版本过高,需要安装低版本的gcc.g++ sudo apt-get install -y gcc-4.9 sudo apt-get install -y g++-4.9 cd /u ...