csv文件读写
csv的简单介绍
CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件。python自带了csv模块,专门用于处理csv文件的读取
csv的写入
1通过创建writer对象,主要用到2个方法。一个是writerow,写入一行。另一个是writerows写入多行
2使用DictWriter 可以使用字典的方式把数据写入进去
第一种写入方法(通过创建writer对象)
✅先来说一下第一种写入的方法:通过创建writer对象写入(每次写入一行)
步骤:1.创建数据和表头2.创建writer对象3.写表头4.遍历列表,将每一行数据写入csv
代码如下:
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">import</span> csv
person <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'xxx'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">193</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'yyy'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">182</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'zzz'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">19</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">185</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
<span style="color:#6272a4"># 表头</span>
header <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">]</span>
<span style="color:#ff79c6">with</span> <span style="color:#f1fa8c">open</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'person.csv'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'w'</span><span style="color:#999999">,</span> encoding<span style="color:#6272a4">=</span><span style="color:#f1fa8c">'utf-8'</span><span style="color:#999999">)</span> <span style="color:#ff79c6">as</span> file_obj<span style="color:#999999">:</span>
<span style="color:#6272a4"># 1:创建writer对象</span>
writer <span style="color:#6272a4">=</span> csv<span style="color:#999999">.</span>writer<span style="color:#999999">(</span>file_obj<span style="color:#999999">)</span>
<span style="color:#6272a4"># 2:写表头</span>
writer<span style="color:#999999">.</span>writerow<span style="color:#999999">(</span>header<span style="color:#999999">)</span>
<span style="color:#6272a4"># 3:遍历列表,将每一行的数据写入csv</span>
<span style="color:#ff79c6">for</span> p <span style="color:#ff79c6">in</span> person<span style="color:#999999">:</span>
writer<span style="color:#999999">.</span>writerow<span style="color:#999999">(</span>p<span style="color:#999999">)</span>
</code></span></span>
写入完就会在当前目录下出现一个person.csv文件,鼠标右键点击show in Explorer打开person.csv查看
打开以后会发现写入的数据中间会换行
居然:那么应该怎么解决这个问题呢
hacker:很简单啊
只需要在写入数据的时候加上一个参数 newline=‘’为了防止换行写入
改正后的代码如下:
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">import</span> csv
<span style="color:#6272a4"># 数据</span>
person <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'xxx'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">193</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'yyy'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">182</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'zzz'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">19</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">185</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
<span style="color:#6272a4"># 表头</span>
header <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">]</span>
<span style="color:#ff79c6">with</span> <span style="color:#f1fa8c">open</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'person.csv'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'w'</span><span style="color:#999999">,</span> encoding<span style="color:#6272a4">=</span><span style="color:#f1fa8c">'utf-8'</span><span style="color:#999999">,</span> newline<span style="color:#6272a4">=</span><span style="color:#f1fa8c">''</span><span style="color:#999999">)</span> <span style="color:#ff79c6">as</span> file_obj<span style="color:#999999">:</span>
<span style="color:#6272a4"># 创建对象</span>
writer <span style="color:#6272a4">=</span> csv<span style="color:#999999">.</span>writer<span style="color:#999999">(</span>file_obj<span style="color:#999999">)</span>
<span style="color:#6272a4"># 写表头</span>
writer<span style="color:#999999">.</span>writerow<span style="color:#999999">(</span>header<span style="color:#999999">)</span>
<span style="color:#6272a4"># 遍历,将每一行的数据写入csv</span>
<span style="color:#ff79c6">for</span> p <span style="color:#ff79c6">in</span> person<span style="color:#999999">:</span>
writer<span style="color:#999999">.</span>writerow<span style="color:#999999">(</span>p<span style="color:#999999">)</span>
</code></span></span>
✅通过创建writer对象(一次性写入多行)
步骤:1.创建数据和表头2.创建writer对象3.写表头4.在writerows里传入你要处理的数据
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">import</span> csv
<span style="color:#6272a4"># 数据</span>
person <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'xxx'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">193</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'yyy'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">182</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'zzz'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">19</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">185</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
<span style="color:#6272a4"># 表头</span>
header <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">]</span>
<span style="color:#ff79c6">with</span> <span style="color:#f1fa8c">open</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'person.csv'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'w'</span><span style="color:#999999">,</span> encoding<span style="color:#6272a4">=</span><span style="color:#f1fa8c">'utf-8'</span><span style="color:#999999">,</span> newline<span style="color:#6272a4">=</span><span style="color:#f1fa8c">''</span><span style="color:#999999">)</span> <span style="color:#ff79c6">as</span> file_obj<span style="color:#999999">:</span>
<span style="color:#6272a4"># 创建对象</span>
writer <span style="color:#6272a4">=</span> csv<span style="color:#999999">.</span>writer<span style="color:#999999">(</span>file_obj<span style="color:#999999">)</span>
<span style="color:#6272a4"># 写表头</span>
writer<span style="color:#999999">.</span>writerow<span style="color:#999999">(</span>header<span style="color:#999999">)</span>
<span style="color:#6272a4"># 3.写入数据(一次性写入多行)</span>
writer<span style="color:#999999">.</span>writerows<span style="color:#999999">(</span>person<span style="color:#999999">)</span>
</code></span></span>
写入结果如下:
第二种写入方法(使用DictWriter可以使用字典的方式将数据写入)
注意事项:使用字典的方式写入要注意传递的数据格式必须是字典
如果不是字典的话会报错
AttributeError: ‘tuple’ object has no attribute ‘keys’
步骤1.创建数据和表头( 数据必须是字典格式)2.创建DictWriter对象3.写表头4.写入数据
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">import</span> csv
<span style="color:#6272a4"># 数据</span>
person <span style="color:#6272a4">=</span> <span style="color:#999999">[</span>
<span style="color:#999999">{</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">'xxx'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">193</span><span style="color:#999999">}</span><span style="color:#999999">,</span>
<span style="color:#999999">{</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">'yyy'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">18</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">182</span><span style="color:#999999">}</span><span style="color:#999999">,</span>
<span style="color:#999999">{</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">'zzz'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">19</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">:</span> <span style="color:#f1fa8c">185</span><span style="color:#999999">}</span><span style="color:#999999">,</span>
<span style="color:#999999">]</span>
<span style="color:#6272a4"># 表头</span>
header <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">]</span>
<span style="color:#ff79c6">with</span> <span style="color:#f1fa8c">open</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'person.csv'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'w'</span><span style="color:#999999">,</span> encoding<span style="color:#6272a4">=</span><span style="color:#f1fa8c">'utf-8'</span><span style="color:#999999">,</span> newline<span style="color:#6272a4">=</span><span style="color:#f1fa8c">''</span><span style="color:#999999">)</span> <span style="color:#ff79c6">as</span> file_obj<span style="color:#999999">:</span>
<span style="color:#6272a4"># 1.创建DicetWriter对象</span>
dictWriter <span style="color:#6272a4">=</span> csv<span style="color:#999999">.</span>DictWriter<span style="color:#999999">(</span>file_obj<span style="color:#999999">,</span> header<span style="color:#999999">)</span>
<span style="color:#6272a4"># 2.写表头</span>
dictWriter<span style="color:#999999">.</span>writeheader<span style="color:#999999">(</span><span style="color:#999999">)</span>
<span style="color:#6272a4"># 3.写入数据(一次性写入多行)</span>
dictWriter<span style="color:#999999">.</span>writerows<span style="color:#999999">(</span>person<span style="color:#999999">)</span>
</code></span></span>
csv的读取
通过reader()读取
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">import</span> csv
<span style="color:#ff79c6">with</span> <span style="color:#f1fa8c">open</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'person.csv'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'r'</span><span style="color:#999999">,</span> encoding<span style="color:#6272a4">=</span><span style="color:#f1fa8c">'utf-8'</span><span style="color:#999999">)</span> <span style="color:#ff79c6">as</span> file_obj<span style="color:#999999">:</span>
<span style="color:#6272a4"># 1.创建reader对象</span>
reader <span style="color:#6272a4">=</span> csv<span style="color:#999999">.</span>reader<span style="color:#999999">(</span>file_obj<span style="color:#999999">)</span>
<span style="color:#ff79c6">print</span><span style="color:#999999">(</span>reader<span style="color:#999999">)</span>
</code></span></span>
如果直接打印会返回csv.reader对象,这时需要遍历列表
<_csv.reader object at 0x000001FB8CE655F8>
改正代码如下:
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">import</span> csv
<span style="color:#ff79c6">with</span> <span style="color:#f1fa8c">open</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'person.csv'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'r'</span><span style="color:#999999">,</span> encoding<span style="color:#6272a4">=</span><span style="color:#f1fa8c">'utf-8'</span><span style="color:#999999">)</span> <span style="color:#ff79c6">as</span> file_obj<span style="color:#999999">:</span>
<span style="color:#6272a4"># 1.创建reader对象</span>
reader <span style="color:#6272a4">=</span> csv<span style="color:#999999">.</span>reader<span style="color:#999999">(</span>file_obj<span style="color:#999999">)</span>
<span style="color:#6272a4"># 2.遍历进行读取数据</span>
<span style="color:#ff79c6">for</span> r <span style="color:#ff79c6">in</span> reader<span style="color:#999999">:</span>
<span style="color:#ff79c6">print</span><span style="color:#999999">(</span>r<span style="color:#999999">)</span>
</code></span></span>
读取结果如下:
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#999999">[</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'height'</span><span style="color:#999999">]</span>
<span style="color:#999999">[</span><span style="color:#f1fa8c">'xxx'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'18'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'193'</span><span style="color:#999999">]</span>
<span style="color:#999999">[</span><span style="color:#f1fa8c">'yyy'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'18'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'182'</span><span style="color:#999999">]</span>
<span style="color:#999999">[</span><span style="color:#f1fa8c">'zzz'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'19'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'185'</span><span style="color:#999999">]</span>
</code></span></span>
如果想打印列表的某一个值,可以使用索引打印
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">print</span><span style="color:#999999">(</span>r<span style="color:#999999">[</span><span style="color:#f1fa8c">0</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
</code></span></span>
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python">name
xxx
yyy
zzz
</code></span></span>
通过dictreader()读取
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">import</span> csv
<span style="color:#ff79c6">with</span> <span style="color:#f1fa8c">open</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'person.csv'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'r'</span><span style="color:#999999">,</span> encoding<span style="color:#6272a4">=</span><span style="color:#f1fa8c">'utf-8'</span><span style="color:#999999">)</span> <span style="color:#ff79c6">as</span> file_obj<span style="color:#999999">:</span>
<span style="color:#6272a4"># 1.创建reader对象</span>
dictReader <span style="color:#6272a4">=</span> csv<span style="color:#999999">.</span>DictReader<span style="color:#999999">(</span>file_obj<span style="color:#999999">)</span>
<span style="color:#6272a4"># 2.遍历进行读取数据</span>
<span style="color:#ff79c6">for</span> r <span style="color:#ff79c6">in</span> dictReader<span style="color:#999999">:</span>
<span style="color:#ff79c6">print</span><span style="color:#999999">(</span>r<span style="color:#999999">)</span>
</code></span></span>
返回结果如下:
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python">OrderedDict<span style="color:#999999">(</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'xxx'</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'18'</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'height'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'193'</span><span style="color:#999999">)</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
OrderedDict<span style="color:#999999">(</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'yyy'</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'18'</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'height'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'182'</span><span style="color:#999999">)</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
OrderedDict<span style="color:#999999">(</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'zzz'</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'age'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'19'</span><span style="color:#999999">)</span><span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#f1fa8c">'height'</span><span style="color:#999999">,</span> <span style="color:#f1fa8c">'185'</span><span style="color:#999999">)</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
</code></span></span>
这时我们如果要取到某一个值就需要指定键去寻找值
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python"><span style="color:#ff79c6">print</span><span style="color:#999999">(</span>r<span style="color:#999999">[</span><span style="color:#f1fa8c">'name'</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
</code></span></span>
<span style="color:#000000"><span style="background-color:#282a36"><code class="language-python">xxx
yyy
zzz
</code></span></span>
以上就是python基础教程之csv文件的写入和读取,如果有改进的建议,欢迎在评论区留言奥~
💖人生苦短,我用python💖