python csv文件的读写

本文详细介绍了如何使用Python的csv模块进行CSV文件的读写操作,包括使用numpy数组写入数据,以及如何从CSV文件中读取数据并将其转换回numpy数组的方法。此外,还介绍了利用pandas库进行更高效的数据读取。

csv文件用于存储表格数据,可以用txt和excel打开和编辑。

写入

一次写入一行,注意是使用list来装要输入的一行的内容。

import csv
import numpy as np
out=open("data.csv",'w',newline="")#防止每次输入多空一行
writer=csv.writer(out,dialect='excel')
s=np.asarray([1,2,3,4,5])
a=np.asarray([1,2,3,4,5])
r=np.asarray([1,2,3,4,5])
s1=np.asarray([1,2,3,4,5])
s=np.asarray([1,2,3,4,5])
term=np.asarray([1,2,3,4,5])
for i in rang(3):
     writer.writerow([s,a,r,s1,term])

data.csv中输入结果为:

[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]
[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]
[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]

一次多行写入,注意多行写入使用tuple来装每一行内容:

import csv
import numpy as np
out=open("data.csv",'w',newline="")#防止每次输入多空一行
writer=csv.writer(out,dialect='excel')
s=np.asarray([1,2,3,4,5])
a=np.asarray([1,2,3,4,5])
r=np.asarray([1,2,3,4,5])
s1=np.asarray([1,2,3,4,5])
s=np.asarray([1,2,3,4,5])
term=np.asarray([1,2,3,4,5])
writer.writerow([(s,a,r,s1,term),(s,a,r,s1,term),(s,a,r,s1,term)])

data.csv中输入结果为与上面一样。
注意csv写入文件后,我们读出来是str,而不再是原来的类型了。

读取

一种方式是直接读取:

read=open('data.csv','r')
lines=read.readlines()
print(lines)
print(type(lines[0]))

输出:

['[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]\n','[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]\n','[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]\n']
<class 'str'>

所以把str数据转换回numpy去可以这样做的话会花费一些计算:

read=open("data.csv",'r')
lines=read.readlines()#所有行读出来形成一个list
print(lines)
print(type(lines[0]))#第一行,每一行都是字符串
lines_0=lines[0].split(",")#先把第一行按","化成list
print('lines_0:',lines_0[0])#我们取第一行的第一个来还原成numpy
lines_00=lines_0[0].strip("[]")#去掉[]
lines_00=lines_00.split(" ")#去掉数字之间空格
print('lines_00:',lines_00)
a=np.asarray(lines_00)#转换为numpy,注意这一步还没有完,因为这一步是整个list转换为numpy,里面还是字符串
print(a)#这里如果是a[0]是会报错的
print(a.astype(float))#这里才完成了转换
print(a[0])

输出:

['[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]\n', '[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]\n', '[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]\n']
<class 'str'>
lines_0: [1 2 3 4 5]
lines_00: ['1', '2', '3', '4', '5']
['1' '2' '3' '4' '5']
[1. 2. 3. 4. 5.]
1

另一种读取方式是使用pandas来读取,首先在csv文件里加一行,作为DataFrame的列名:

s,a,r,s1,t
[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]
[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]
[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5],[1 2 3 4 5]

读取:

import csv
import pandas as pd
data=pd.read_csv('data.csv')
print(data['s'])#输出s列
print(data.iloc[0])#输出第0行
print(data.iloc[0][0])#输出输出第0行第0个
print(type(data.iloc[0][0]))

输出:

0    [1 2 3 4 5]
1    [1 2 3 4 5]
2    [1 2 3 4 5]
Name: s, dtype: object
s     [1 2 3 4 5]
a     [1 2 3 4 5]
r     [1 2 3 4 5]
s1    [1 2 3 4 5]
t     [1 2 3 4 5]
Name: 0, dtype: object
[1 2 3 4 5]
<class 'str'>

可以看出读出来的还是str,还是需要转换为numpy

注意如果想保持数据的原有格式存储,建议使用pickle
### Python CSV 文件读取与写入 #### 列表形式读取CSV文件 为了以列表的形式获取CSV文件的信息,可以使用`csv.reader()`方法。此方法返回一个迭代器,每次迭代都会得到CSV文件的一行数据作为字符串列表。 ```python import csv def read_csv_list(file_path): info_list = [] with open(file_path, mode='r', newline='', encoding='utf-8') as file: reader = csv.reader(file) for row in reader: info_list.append(row) return info_list ``` 上述函数定义了一个名为`read_csv_list`的方法来读取指定路径下的CSV文件,并将其内容按照行分割成多个子列表存储于`info_list`变量中[^1]。 #### 字典形式读取CSV文件 如果希望更方便地访问列名对应的值,则可以选择使用`csv.DictReader()`。它会把每行的第一项当作键,其余各项分别对应各个字段的值,形成字典型的数据结构。 ```python import csv def read_csv_dict(file_path): dict_list = [] with open(file_path, mode='r', newline='', encoding='utf-8') as file: dict_reader = csv.DictReader(file) for row in dict_reader: dict_list.append(dict(row)) return dict_list ``` 这段代码展示了如何利用`DictReader`类将CSV文件的内容化为由字典组成的列表,其中每个字典代表一行记录[^3]。 #### 写入CSV文件CSV文件中添加新数据可以通过调用`csv.writer()`实现。下面是一个简单的例子说明怎样创建一个新的CSV文件并向其内部追加几条记录: ```python import csv data_to_write = [ ['姓名', '年龄'], ['张三', 20], ['李四', 22] ] file_path = './output.csv' with open(file_path, mode='w', newline='', encoding='utf-8') as file: writer = csv.writer(file) writer.writerows(data_to_write) ``` 这里先准备好了要保存到CSV文件里的二维数组`data_to_write`,接着打开目标文件并实例化writer对象;最后通过`writerows()`一次性写出多行数据至该文件[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值