文件操作
文件操作
操作CSV文件:
文件保存:
有时候我们有了一个数组,需要保存到文件中,那么可以使用np.savetxt
来实现。相关的函数描述如下:
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
* frame : 文件、字符串或产生器,可以是.gz或.bz2的压缩文件
* array : 存入文件的数组
* fmt : 写入文件的格式,例如:%d %.2f %.18e
* delimiter : 分割字符串,默认是任何空格
以下是使用的例子:
a = np.arange(100).reshape(5,20)
np.savetxt("a.csv",a,fmt="%d",delimiter=",")
读取文件:
有时候我们的数据是需要从文件中读取出来的,那么可以使用np.loadtxt
来实现。相关的函数描述如下:
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
* frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件。
* dtype:数据类型,可选。
* delimiter:分割字符串,默认是任何空格。
* skiprows:跳过前面x行。
* usecols:读取指定的列,用元组组合。
* unpack:如果True,读取出来的数组是转置后的。
np独有的存储解决方案:
numpy
中还有一种独有的存储解决方案。文件名是以.npy
或者npz
结尾的。以下是存储和加载的函数。
- 存储:
np.save(fname,array)
或np.savez(fname,array)
。其中,前者函数的扩展名是.npy
,后者的扩展名是.npz
,后者是经过压缩的。 - 加载:
np.load(fname)
。
总结:
1、np.savetxt和np.loadtxt一般用来操作csv文件,他可以设置header,但是不能存储3维以上的数组。
2、 np.save和np.load一般用来存储非文本类型的文件,他不可以设置header,但是可以存储3维以上的数组。
3、如果想专门的操作CSV文件,其实还有另外一个模块叫做csv,这个模块是python内置的,不需要安装。
CSV文件操作:
读取csv文件:
import csv # 读取csv文件,就需要导入python内置的这个csv模块
with open('stock.csv','r') as fp: # 首先打开文件,然后将指针传给reader这个对象
reader = csv.reader(fp)
titles = next(reader) # next会将这个迭代器往下挪一位,不带标题,这个时候再去遍历reader时,从第一行开始。
for x in reader:
print(x)
这样操作,以后获取数据的时候,就要通过下表来获取数据。如果想要在获取数据的时候通过标题来获取。那么可以使用DictReader
。示例代码如下:
import csv
with open('stock.csv','r') as fp:
reader = csv.DictReader(fp)
for x in reader:
print(x['turnoverVol'])
import csv
def read_csv_demo1():
with open('stock.csv', 'r') as fp:
# reader是一个迭代器
reader = csv.reader(fp)
# next(reader)
for x in reader:
name = x[3]
volumn = x[-1]
print({'name': name, 'volumn': volumn})
def read_csv_demo2():
with open('stock.csv','r') as fp:
# 使用DictReader创建的reader对象
# 不会包含标题那行的数据
# reader是一个迭代器,遍历这个迭代器,返回来的是一个字典。
reader = csv.DictReader(fp)
for x in reader:
value = {"name":x['secShortName'],'volumn':x['turnoverVol']}
print(value)
# read_csv_demo1()
read_csv_demo2()
# 输出:
{'name': '平安银行', 'volumn': '178493315'}
{'name': '万科A', 'volumn': '55743855'}
{'name': '国农科技', 'volumn': '2211059'}
{'name': '世纪星源', 'volumn': '2365348'}
{'name': '深振业A', 'volumn': '0'}
{'name': '全新好', 'volumn': '0'}
{'name': '神州高铁', 'volumn': '5689054'}
写入数据到csv文件:
写入数据到csv文件,需要创建一个writer
对象,主要用到两个方法。一个是writerow
,这个是写入一行。一个是writerows
,这个是写入多行。示例代码如下:
import csv
headers = ['name','age','classroom']
values = [
('zhiliao',18,'111'),
('wena',20,'222'),
('bbc',21,'111')
]
with open('test.csv','w',newline='') as fp:
writer = csv.writer(fp)
writer.writerow(headers)
writer.writerows(values)
也可以使用字典的方式把数据写入进去。这时候就需要使用DictWriter
了。示例代码如下:
import csv
headers = ['name','age','classroom']
values = [
{"name":'wenn',"age":20,"classroom":'222'},
{"name":'abc',"age":30,"classroom":'333'}
]
with open('test.csv','w',newline='') as fp:
writer = csv.DictWriter(fp,headers)
writer.writerow({'name':'zhiliao',"age":18,"classroom":'111'})
writer.writerows(values)
def write_csv_demo1():
headers = ['username', 'age', 'height']
values = [
('張三', 18, 180),
('李四', 19, 190),
('王五', 20, 160)
]
with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:
writer = csv.writer(fp)
writer.writerow(headers)
writer.writerows(values)
def write_csv_demo2():
headers = ['username', 'age', 'height']
values = [
{'username':'张三','age':18,'height':180},
{'username':'李四','age':19,'height':190},
{'username':'王五','age':20,'height':160}
]
with open('classroo1.csv','w',encoding='utf-8',newline='') as fp:
writer = csv.DictWriter(fp,headers)
# 写入表头数据的时候,需要调用writeheader方法
writer.writeheader()
writer.writerows(values)
# write_csv_demo1()
write_csv_demo2()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能