【python】文件读写:csv(三)

在Python中,CSV(Comma-Separated Values,逗号分隔值)文件的读取和写入可以通过内置的csv模块轻松实现。以下是如何使用csv模块进行CSV文件读取和写入的示例。

目录

一、读取CSV文件

1. 导入csv模块

2. 导入csv模块

3.创建CSV读取器

4.遍历CSV文件的行

5.使用csv.DictReader

二、写入CSV文件

1.打开CSV文件

2. 创建CSV写入器

3. 写入CSV文件的行

4.写入多行数据

5.使用csv.DictWriter

三、其它:mode参数


一、读取CSV文件

1. 导入csv模块

首先,你需要导入Python的csv模块。

import csv

2. 导入csv模块

with open('example.csv', mode='r', newline='') as file:  
    # ...

使用open()函数以读取模式('r')打开CSV文件,并指定newline=''参数以防止在Windows上出现额外的空行。

newline=''参数在处理Windows上的CSV文件时很重要,因为它可以防止出现额外的空行。

3.创建CSV读取器

reader = csv.reader(file)

使用csv.reader()函数创建CSV读取器对象。

4.遍历CSV文件的行
 

for row in reader:  
    print(row)  # 输出:['字段1', '字段2', '字段3', ...]

通过迭代reader对象,可以逐行读取CSV文件的内容。每一行都被解析为一个列表,其中包含了该行的所有字段。

5.使用csv.DictReader
 

with open('example.csv', mode='r', newline='') as file:  
    reader = csv.DictReader(file)  
    for row in reader:  
        print(row['字段名'])  # 输出:字段名对应的值

如果CSV文件包含标题行(header row),可以使用csv.DictReader()将每一行解析为字典,其中键是标题,值是对应的数据。

csv.reader和csv.DictReader的区别?

  1. 数据表示csv.reader将每一行解析为一个列表,而csv.DictReader将每一行解析为一个字典。
  2. 访问方式:使用csv.reader时,你需要通过索引来访问列的值;而使用csv.DictReader时,你可以通过列名来访问列的值。
  3. 标题行csv.DictReader假设CSV文件的第一行是标题行,并据此创建字典的键。如果CSV文件没有标题行,你需要提供fieldnames参数。而csv.reader则不关心标题行,它只是简单地将每一行解析为一个列表。
  4. 灵活性csv.reader更加灵活,因为它不依赖于标题行的存在。而csv.DictReader则更适用于那些具有明确标题行的CSV文件。

如果没有标题行,但是使用了csv.DictReader,会怎么样?

如果没有标题行,但是使用了csv.DictReadercsv.DictReader将无法自动从文件中读取列名来作为字典的键。在这种情况下,可以手动为csv.DictReader提供fieldnames参数。

如果不提供fieldnames参数并且CSV文件也没有标题行,那么csv.DictReader将默认使用从第一行数据开始的列值作为字典的键。

import csv  
  
# 假设你的CSV文件没有标题行,但你希望使用'Column1', 'Column2'等作为列名  
fieldnames = ['Column1', 'Column2', 'Column3']  # 根据你的CSV文件定义列名  
  
with open('example_without_header.csv', mode='r', newline='') as file:  
    reader = csv.DictReader(file, fieldnames=fieldnames)  
    for row in reader:  
        # 现在你可以通过列名来访问单元格的值了  
        value1 = row['Column1']  
        value2 = row['Column2']  
        value3 = row['Column3']  
        print(value1, value2, value3)

二、写入CSV文件

1.打开CSV文件

with open('output.csv', mode='w', newline='') as file:  
    # ...

使用open()函数以写入模式('w''a',分别代表写入和追加)打开CSV文件。

2. 创建CSV写入器

writer = csv.writer(file)

使用csv.writer()函数创建CSV写入器对象。

3. 写入CSV文件的行

writer.writerow(['字段1', '字段2', '字段3'])

使用writerow()方法写入一行数据。该方法接受一个列表或元组作为参数,并将其写入CSV文件。

4.写入多行数据

data = [  
    ['数据1', '数据2', '数据3'],  
    ['数据4', '数据5', '数据6'],  
    # ...  
]  
for row in data:  
    writer.writerow(row)

可以通过循环来写入多行数据。

5.使用csv.DictWriter

fieldnames = ['字段名1', '字段名2', '字段名3']  
with open('output.csv', mode='w', newline='') as file:  
    writer = csv.DictWriter(file, fieldnames=fieldnames)  
    writer.writeheader()  
    writer.writerow({'字段名1': '数据1', '字段名2': '数据2', '字段名3': '数据3'})

如果想将字典写入CSV文件,可以使用csv.DictWriter()。需要提供一个字段名的列表,并使用writeheader()方法写入标题行。
注意事项:

  • 使用'w'模式打开文件会覆盖文件中的所有内容。如果你想在文件的末尾追加内容,应该使用'a'模式。
  • 同样,使用with语句来确保文件在操作完成后被正确关闭。
  • 当使用csv.DictWriter()时,确保提供的字典包含所有字段名,或者至少包含那些你打算写入的字段名。
  • 在写入CSV文件时,注意字段之间使用逗号(,)分隔,这是CSV文件的默认分隔符。如果你的字段中包含逗号、换行符或引号等特殊字符,csv模块会自动进行转义处理。

三、其它:mode参数

在Python中,open()函数用于打开文件,其mode参数决定了文件的打开方式。除了上文提到的r(读取)、a(追加)和w(写入)之外,还有其他一些可用的模式。以下是mode参数的一些常用值及其说明:

  1. 'r':只读模式。文件必须存在,否则抛出FileNotFoundError异常。文件指针会被放在文件的开头。

  2. 'w':写入模式。如果文件不存在,则会创建新文件;如果文件存在,则会覆盖原文件。文件指针会被放在文件的开头。

  3. 'a':追加模式。如果文件不存在,则会创建新文件;如果文件存在,则会在文件末尾追加内容。文件指针会被放在文件的末尾。

  4. 'x':独占创建模式。如果文件已存在,则抛出FileExistsError异常;如果文件不存在,则会创建新文件。文件指针会被放在文件的开头。这个模式通常用于确保文件是新建的,而不是覆盖已存在的文件。

  5. 'b':二进制模式。通常与其他模式(如'r''w''a')一起使用,表示文件应该以二进制模式打开,而不是文本模式。在二进制模式下,读写操作都是以字节为单位的。

  6. 't':文本模式。这是默认的模式,通常不需要显式指定。在文本模式下,读写操作都是以字符串为单位的,并且会根据平台的换行符(如\n\r\n)进行转换。

  7. '+':更新模式。通常与其他模式(如'r''w''a')一起使用,表示文件既可以读取也可以写入。例如,'r+'表示读写模式,'w+'表示读写模式(但会覆盖原文件),'a+'表示在文件末尾追加并可以读取文件。

这些模式可以组合使用,但某些组合可能没有意义或不被支持。例如,'rw'通常被简化为'r+',因为两者都表示读写模式。同样,'rb'表示以二进制模式读取文件,'wb'表示以二进制模式写入文件,依此类推。

也可以参考之前的文章【Python】文件读写(一)-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值