本文介绍 open|csv|dataframe|openpyxl 4种文件读写方法。
目录
一、内置方法open()读写
方式1-打开/读写/关闭(适用文件较小时):
方式2-with关键字防止忘记关闭(适用文件较小时):
方式3-readlines读取全部内容返回列表(适用文件较小时):
方式4-for循环逐行读取(占内存少,大文件可用;适用于对每行数据进行特殊操作):
二、csv模块读写
2-写入csv文件
三、DataFrame对象读写(适用数据需要计算时)
1-将表格型文件数据读取为DataFrame对象
2-将DataFrame对象写入文件
拓展:pd.ExcelWriter函数合并多个csv文件到一个excel的不同sheet
四、openpyxl库读写(适用格式处理、图表展示等需求)
2-写入excel文件
f = open('./data.txt', 'r') #读
print(f.read())
f.close()
f = open('./data.txt', 'w') #写(文件存在则清空重写)
f.write("第一行")
f.close()
f = open('./data.txt', 'a') #追加(文件不存在则创建,存在则追加)
f.write('\n')
f.write("第二行")
f.close()
with open('./data.txt', 'r') as f: #读
print(f.read())
with open('./data.txt', 'w') as f: #写
f.write("第一行")
with open('./data.txt', 'a') as f: #追加
f.write('\n')
f.write("第二行")
f = open('./data.txt', 'r') #文件内容:d`换行` d`换行` d`换行`
print(f.readlines()) #结果:['d\n', 'd\n', 'd']
f.close()
拓展:列表推导式(适用于对每行数据进行特殊操作)
loadData = [line.strip() for line in open('./data.txt').readlines()]
print(loadData) #['d', 'd', 'd']
补充:readline读取第一行内容
f = open('./data.txt', 'r') #文件内容:d`换行` d`换行` d`换行`
print(f.readline()) #结果:d
f.close()
for line in open("./data.txt"):
# print(line)
print(line.strip()) #清除两边空白符
1-读取csv文件
略
import csv
list1 = [1, 2, 3]
list2 = [[4, 5, 6],[7, 8, 9]]
with open('outfile.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(['a', 'b', 'c']) #写入表头
writer.writerow(list1) #列表写入同一行
writer.writerows(list2) #二维列表中每个列表写入一行
import pandas as pd
pd.read_csv('./data.txt') #默认分隔符为逗号; #默认第一行为列名
pd.read_csv('./data.csv', names=['col1', 'col2']) #names指定列名
pd.read_table('./data.csv', sep=',') #默认分隔符为制表符("\t");sep指定分隔符
pd.read_excel('./data.xlsx', sheet_name="sheet1")
df.to_csv('outfile.csv')
df.to_excel('outfile.xlsx', index=False) #index指定无索引
# 思路:csv转dataframe转excel
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8') #出现ASCII编码问题,添加以上3行
import pandas as pd
aim = pd.ExcelWriter('/data/merge.xlsx') # 创建一个输出文件
data = pd.read_csv('/data/file1.csv',sep=',') #读取file1
data.to_excel(aim,'sheet_file1',index=False) #file1写入excel第一个sheet
data = pd.read_csv('/data/file2.csv',sep=',') #读取file2
data.to_excel(aim,'sheet_file2',index=False) #file2写入excel第二个sheet
aim.save() #保存excel
1-读取excel文件
略
import openpyxl
#新建excel
def creatwb(wbname):
wb=openpyxl.Workbook()
wb.save(filename=wbname)
print ("新建Excel:"+wbname+"成功")
#数据保存到excel
def savetoexcel(result, wbname):
creatwb(wbname)
wb = openpyxl.load_workbook(filename=wbname)
sheet1 = wb.active # 获取默认打开的(active)的WorkSheet
sheet1.title = 'price'
fields = ['机型','产品名','产品类型','价格']
field=1
for field in range(1,len(fields)+1): # 写入表头
_=sheet1.cell(row=1,column=field,value=str(fields[field-1]))
row1=1
col1=0
for row1 in range(2,len(result)+2): # 写入数据
for col1 in range(1,len(result[row1-2])+1):
_=sheet1.cell(row=row1,column=col1,value=(result[row1-2][col1-1]))
wb.save(filename=wbname)
print("保存成功")
if __name__=='__main__':
result = [['a', 'A', 'type1', '999'], ['b', 'B', 'type2', '1999']]
wbname = './outfile.xlsx'
savetoexcel(result, wbname)
参考:
1、最好懂的python文件读写(详解)
2、一篇文章带你搞懂Python的文件读写
3、Python逐行读取文件内容的方法总结
4、pandas如何在同一工作簿中保存多个sheet-----pd.ExcelWriter()
5、openpyxl
6、Python:使用 csv 模块读写 csv 文件