Python-CSV文件的存储

本文介绍了如何使用Python的csv模块进行CSV文件的写入,包括使用writer和DictWriter处理结构化数据,以及读取CSV文件的方法,包括基本的reader和pandas的read_csv。
部署运行你感兴趣的模型镜像

CSV文件存储

  CSV其文件以纯文本形式存储表格数据。CSV文件是一个字符序列,可以由任意数目的记录组成,各种记录由某种换行符分隔开。它比Excel文件更加简洁,XLS文本是电子表格,包含文本、数值、公式和格式等内容,CSV中则不包含这些,就是以特定字符作为分隔符的纯文本,结构简单清晰,所以有时候使用CSV来存储数据是比较方便的。

1.写入

import csv

with open('data.csv','w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id','name','age'])
    writer.writerow(['10001','Mike',20])
    writer.writerow(['10002','Bob',21])
    writer.writerow(['10003','Jered',22])

  这里首先打开data.csv文件,指定打开模式w写入,获得文件句柄,随后调用csv库的writer方法初始化写入对象,传入该句柄,然后用writerow方法传入每行的数据。
  运行结束后会生成一个名为data.csv的文件,打开如图所示。
在这里插入图片描述
  这时候如果直接打印输出会发现分隔符这时是默认的以逗号分隔,如果想修改列与列之间的分隔符,可以传入delimiter参数。

import csv

with open('data.csv','w') as csvfile:
    writer = csv.writer(csvfile,delimiter=' ')
    writer.writerow(['id','name','age'])
    writer.writerow(['10001','Mike',20])
    writer.writerow(['10002','Bob',21])
    writer.writerow(['10003','Jered',22])

  这时就会发现列于列之间的分隔符已经变成了空格。
  另外我们也可以调用writerows方法同时写入多行,此时参数需要传入二维列表。

import csv

with open('data.csv','w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id','name','age'])
    writer.writerows([['10001','Mike',20],['10002','Bob',21],['10003','Jered',22]])
  

  但是,在一般情况下爬虫爬取的数据都是结构化数据,我们一般会用字典表示。csv库也提供了字典的写入方式。

import csv

with open('data.csv','w') as csvfile:
    filednames = ['id','name','age']
    writer = csv.DictWriter(csvfile,fieldnames=filednames)
    writer.writeheader()
    writer.writerow({'id':'10001','name':'Mike','age':20})
    writer.writerow({'id':'10002','name':'Bob','age':21})
    writer.writerow({'id':'10003','name':'Jared','age':22})

  这里定义了三个字段,用filedname表示,然后传给DictWriter方法以初始化一个字典写入对象,并赋值给writer变量。接着用writeheader方法先写入头信息,再调用writerow方法传入相应字典。
  另外,如果想要追加写入,可以修改文件的打开模式,即把open函数的第二个参数改成a,代码如下:

import csv

with open('data.csv','a') as csvfile:
    filednames = ['id','name','age']
    writer = csv.DictWriter(csvfile,fieldnames=filednames)
    writer.writerow({'id':'10004','name':'Lan','age':25})

  这样数据就会被追加写入到文件中。
  如果要写入中文内容,可能会遇到编码的问题,我们可以给open指定编码格式。

import csv

with open('data.csv','a',encoding='utf-8') as csvfile:
    filednames = ['id','name','age']
    writer = csv.DictWriter(csvfile,fieldnames=filednames)
    writer.writerow({'id':'10004','name':'王伟','age':25})

  如果接触过pandas库,可以调用DataFrame对象的to_csv方法将数据写入到CSV文件中。

import pandas as pd

data = [
    {'id':'10004','name':'王伟','age':25},
    {'id':'10002','name':'Bob','age':21},
    {'id':'10003','name':'Jared','age':22}
]

df = pd.DataFrame(data)
df.to_csv('data.csv',index=False)

  我定义了几个字典数据,组成列表,赋值给data。用pandas的DataFrame类新建了一个DataFrame对象,参数传入data,最后调用df的to_csv方法将数据保存为CSV文件

2.读取

  我们同样可以使用csv库来读取文件。例如,把上面写入的文件读取出来。

mport csv

with open('data.csv','r',encoding='utf-8') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)

  运行结果如下:

[‘id’, ‘name’, ‘age’]
[‘10004’, ‘王伟’, ‘25’]
[‘10002’, ‘Bob’, ‘21’]
[‘10003’, ‘Jared’, ‘22’]

  另外也可以使用pandas的read_csv方法读取数据。

import pandas as pd

df = pd.read_csv('data.csv')
print(df)

  运行结果如下:

id name age
0 10004 王伟 25
1 10002 Bob 21
2 10003 Jared 22

  这里的df实际为DataFrame对象,如果只想读取文件中的数据,可以进一步将df转化为列表或者元组。

import pandas as pd

df = pd.read_csv('data.csv')
data = df.values.tolist()
print(data)

  这里调用了df的values属性,再调用tolist方法转化为列表,运行结果如下:

[[10004, ‘王伟’, 25], [10002, ‘Bob’, 21], [10003, ‘Jared’, 22]]

  另外直接对df进行遍历,也能达到列表类型的结果。

import pandas as pd

df = pd.read_csv('data.csv')
for index,row in df.iterrows():
    print(row.tolist())

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要解决用户的问题:“如何用Python读取和解析CSV文件”。用户之前可能已经得到了一些回答,但需要更详细的步骤和示例代码。首先,我要确定用户的需求是什么。他们可能想了解不同的方法,比如使用内置的csv模块或者第三方库如pandas,以及具体的操作步骤。 接下来,我需要参考提供的引用内容。根据引用[1]、[2]、[3]、[4]、[5],用户提到了csv模块和pandas库两种方法。引用中提到了csv.reader、csv.DictReader以及pandas的read_csv函数。这些都是常用的方法,应该涵盖在回答中。 然后,我应该结构化回答。首先分点说明两种主要方法:内置csv模块和pandas库。每种方法下再细分不同的读取方式,比如按行读取、按列处理,或者使用DictReader。同时,需要给出示例代码,并解释代码的作用,比如如何处理标题行,如何存储数据。 另外,用户可能需要知道不同方法的优缺点。比如csv模块适合简单处理,而pandas适合数据分析和复杂操作。这点也需要在回答中提到,帮助用户选择合适的方法。 还需要注意代码的正确性。比如在使用csv模块时,打开文件需要指定正确的模式和编码,处理标题行可能需要使用next(reader)。在pandas的例子中,展示如何读取文件并转换为DataFrame,以及如何处理缺失值。 最后,生成相关问题,可能包括性能优化、处理大文件、修改CSV文件等,这些可以帮助用户进一步学习。 检查是否遗漏了重要的细节,比如错误处理或不同编码的支持,但根据引用内容,可能不需要深入这些方面。确保回答清晰,步骤详细,代码示例正确,并且引用正确来源。</think>以下是Python中读取和解析CSV文件的详细方法与示例代码: --- ### 一、使用内置csv模块 #### 1. 基础逐行读取 ```python import csv with open('data.csv', 'r', encoding='utf-8') as file: reader = csv.reader(file) for row_num, row in enumerate(reader): if row_num == 0: headers = row # 存储标题行 print("标题:", headers) else: print(f"第{row_num}行数据:", row) ``` *特点*:返回列表格式数据,适合简单场景[^3][^5] #### 2. 字典形式读取(含标题处理) ```python import csv data_by_column = {} with open('data.csv', 'r', encoding='utf-8') as file: reader = csv.DictReader(file) for row in reader: for key, value in row.items(): data_by_column.setdefault(key, []).append(value) print("按列存储的数据结构:", data_by_column) ``` *特点*:自动处理标题行,可通过字段名访问数据[^4][^5] --- ### 二、使用pandas库 #### 1. 快速读取为DataFrame ```python import pandas as pd df = pd.read_csv('data.csv', encoding='utf-8') print("前5行数据预览:") print(df.head()) # 存储为字典列表 records = df.to_dict('records') ``` *特点*:自动类型推断,支持缺失值处理[^4] #### 2. 大数据量分块读取 ```python chunk_size = 1000 for chunk in pd.read_csv('large_data.csv', chunksize=chunk_size): process(chunk) # 自定义处理函数 ``` *适用场景*:内存受限时处理大型CSV文件[^2] --- ### 三、数据存储技巧 1. **按行存储**:`List[List]`结构,适合顺序处理 2. **按列存储**:`Dict{列名:List}`结构,适合字段操作 3. **混合存储**:使用`namedtuple`实现带类型的数据对象 --- ### 四、方法对比 | 方法 | 优点 | 缺点 | |-----------|-----------------------|---------------------| | csv模块 | 无需安装依赖,内存占用低 | 功能相对基础 | | pandas库 | 支持复杂数据分析,自动类型转换 | 需要安装第三方库 | | numpy库 | 适合数值型数据处理 | 对文本支持较弱 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jared Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值