Python提供一个csv的使用模块,但与numpy模块下带有的csv模块有所区别,numpy模块的csv多用于辅助于统计计算。但具体怎样,小编还没有涉及。本编主要讲csv模块读写的操作。本篇的代码基于Python3。
csv模块读入操作:
with open('E:\csd学院汇总表.csv', 'rt') as f: #rt表示按文本读入,rb表示按二进制读入
sf = csv.reader(f, delimiter=' ', quotechar='|')
for row in sf:
print(row)
csv模块写入数据操作:
import csv
with open('E:\\names.csv', 'wt', newline='') as csvfile:
fieldnames = ['first_name', 'last_name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'first_name':1, 'last_name':2})
writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})
csv模块批量写入数据操作:把一列数据整理成列表形式,调用zip函数,批量将数据写入csv文件
import csv
import os
def main():
current_dir = os.path.abspath('.')
file_name = os.path.join(current_dir, "csss.csv")
csvfile = open('E:\\names.csv', 'wt', newline='')
writer=csv.writer(csvfile, delimiter=",")
header=['序号','课程名','课时','价格']
csvrow1 = name
csvrow2 = class_num
csvrow3 = price
num = list(np.arange(1,5960,1)) #生成1到5960间隔为1的数
for n in num:
num[num.index(n)] = str(n)
# print(num[5958],csvrow1[5959],csvrow2[5959][0])
print(num[0:200],csvrow1[0:200],csvrow2[0:200],csvrow3[0:200])
writer.writerow(header)
writer.writerows(zip(num,csvrow1,csvrow2))
print(zip(num,csvrow1,csvcol2,csvrow3[0]))
csvfile.close()
if __name__ == '__main__':
main()
解决中文乱码问题:
import csv
import codecs
def main():
with open('E:\\names.csv', 'w', newline='') as csvfile:
# csvfile.write()
csvfile.write(codecs.BOM_UTF8)
writer=csv.writer(csvfile, delimiter=",")
header=['序号','课程名','课时','价格']
csvrow1 = name
csvrow2 = class_num
csvrow3 = ['']*(len(name)-1)
num = list(np.arange(1,5960,1)) #生成1到5960间隔为1的数
for n in num:
num[num.index(n)] = str(n)
if (price[n-1]!=[]):
csvrow3[n-1] = str(price[n-1][0])
writer.writerow(header)
print(csvrow3[1:10])
writer.writerows(zip(num,csvrow1,csvrow2,csvrow3))
zp = zip(num[0:100],csvrow1[0:100],csvrow2[0:100],csvrow3[0:100])
csvfile.close()
if __name__ == '__main__':
main()