大家好,又见面了,我是你们的朋友全栈君。
python csv文件数据写入和读取(适用于超大数据量)
一般情况下由于我们使用的数据量比较小,因此可以将数据一次性整体读入或者写入,而且可以一次性对数据进行加工和处理。
但是当数据量比较大,比如有5G的数据量,这个时候想要一次性对所有数据进行操作就比较困难了。所以需要逐条将数据进行处理。
import csv
# 在最开始创建csv文件,并写入列名。相当于做一些准备工作
with open(savepath, 'w') as csvfile: #以写入模式打开csv文件,如果没有csv文件会自动创建。
writer = csv.writer(csvfile)
# writer.writerow(["index","a_name","b_name"]) # 写入列名,如果没有列名可以不执行这一行
# writer.writerows([[0, 1, 3], [1, 2, 3], [2, 3, 4]]) # 写入多行用writerows
#如果你的数据量很大,需要在循环中逐行写入数据
for i in range(100000):
with open(savepath, 'a+', newline='') as csvfile: # a+表示以追加模式写入,如果用w会覆盖掉原来的数据。如果没有newline='',则逐行写入的数据相邻行之间会出现一行空白。读者可以自己试一试。
csv_write = csv.writer(csvfile)
csv_write.writerow(row_data) # 写入1行用writerow; row_data是你要写入的数据,最好是list类型。
f = open(savepath)
csv_read = csv.reader(f)
for line in csv_read: # csv.reader(f)返回一个迭代器。迭代器的好处就是可以不用一次性将大量的数据都读进来,而是如果你需要一条,就给迭代器一个命令让它输出一条。关于迭代器的优点读者可以另行学习。
print line
需要注意从csv文件读出来的数据是字符串,不是浮点数。使用float(str)完成转换。
# 也可以使用pandas读取csv文件
import pandas as pd
data = pd.read_csv(filepath, head=None, encoding='utf-8') #data是一个dataframe对象
# 关于read_csv函数,这里并不做详细讲解。
data = data.values().astype('float32') #将dataframe转换为数值矩阵
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162498.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...