【python基础教程】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💖
在这里插入图片描述

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值