专题01-python文件的读写功能(Excel与txt)

笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据助跑每一个人,欢迎直筒们关注我的公众号,大家一起讨论数据中的那些有趣的事情。

我的公众号为:livandata

        一直以来想写一系列平时关于小技能的专题,刚好过年练笔,借这个机会整理一下,这一系列的文章并没有什么高深的技能,也没有复杂的逻辑和深奥的原理,但却是平时频繁用到的比较实用的小功能,经过一行行代码的编写,从网上或者自己写出一套资料,方便自己后面使用。

        工具提前准备在平时的工作中是提高效率的一个较好的方法,我们只需要记住在这个位置有这一套方法,当用到时能够及时的翻出来,用最短的时间实现功能即可,我想大家也都了解木牛流马也不是诸葛亮边打仗边造出来的吧。

        Python被编造出来主要的初衷就是释放双手,让我们将更多的精力放在逻辑上,放在思维上,那我们也尝试着用CSDN整理一套属于我们自己的“木牛流马”,方便我们在缺粮的时候使用。

        在做数据分析时经常会用到的功能是Excel的读写问题,如何读入Excel,然后对数据进行处理,然后再输入Excel是我们用python进行数据分析时经常会用到的,此处我们进行整理,如下:

1、读入Excel文件:

#!/usr/bin/env python
# _*_ UTF-8 _*_
'''
@project:GBDT+LR-Demo
@author:xiaofei
'''
import xlrd

# 用来存储数据
tables = []
newTables = []
def read_excel(path):
    # 打开文件
    workbook = xlrd.open_workbook(path)
    # 获取所有sheet
    sheet_name = workbook.sheet_names()[0]
    # 根据sheet索引或者名称获取sheet内容
    sheet = workbook.sheet_by_index(0) # sheet索引从0开始
    # sheet = workbook.sheet_by_name('Sheet1')
    #print (workboot.sheets()[0])
    # sheet的名称,行数,列数
    print (sheet.name,sheet.nrows,sheet.ncols)
    # 获取整行和整列的值(数组)
    rows = sheet.row_values(1) # 获取第2行内容
    # cols = sheet.col_values(2) # 获取第3列内容
    print (rows)
    # print (cols)
    # 将内容读取出来,放到list中。
    for rown in range(sheet.nrows):
       array = {'L1':'','L2':'','L3':'','L4':'','Question':'','Answer':''}
       array['L1'] = sheet.cell_value(rown,0)
       array['L2'] = sheet.cell_value(rown,1)
       array['L3'] = sheet.cell_value(rown,2)
       array['L4'] = sheet.cell_value(rown,3)
       array['Question'] = sheet.cell_value(rown,4)
       array['Answer'] = sheet.cell_value(rown,5)
       tables.append(array)
    print(tables)
    print (len(tables))
if __name__ == '__main__':
    # 读取Excel
    read_excel(r'C:/Users/xiaofei/Desktop/test3.xlsx');
    print ('读取成功')

2、写出数据:

#!/usr/bin/env python
# _*_ UTF-8 _*_
import openpyxl
# 写excel
# 用来存储数据
tables = []
newTables = []
def write_excel():
    f = openpyxl.Workbook()  # 创建工作簿
    sheet1 = f.create_sheet()
    # sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet
    row0 = [u'L1', u'L2', u'L3', u'L4', u'问题', u'答案']
    # 生成第一行
    # for i in range(len(row0)):
    #    sheet1.cell(column=i,row=0).value='L1')
    # 生成后续
    for jkey in range(len(newTables)):
        jk = 1
        for cT in range(arrayNum):
            jk = jkey + 1
            if cT == 0:
                sheet1.cell(row=jk, column=cT + 1).value = '1'
            else:
                sheet1.cell(row=jk, column=cT + 1).value = '2'
    f.save("chatPy.xlsx")  # 保存文件
if __name__ == '__main__':
    # 写入Excel
    write_excel();
    print('写入成功')

3、读入txt文件:

#!/usr/bin/env python
# _*_ UTF-8 _*_
#第一种方法
f = open("test.txt","r")   #设置文件对象
line = f.readline()
line = line[:-1]
while line:             #直到读取完文件
    line = f.readline()  #读取一行文件,包括换行符
    line = line[:-1]     #去掉换行符,也可以不去
f.close() #关闭文件
#第二种方法
data = []
for line in open("test.txt","r"): #设置文件对象并读取每一行文件
    data.append(line)               #将每一行文件加入到list中
#第三种方法
f = open("test.txt","r")   #设置文件对象
data = f.readlines()  #直接将文件中按行读到list里,效果与方法2一样
f.close()             #关闭文件
# 第四种方法:
import numpy as np
data = np.loadtxt("test.txt")   #将文件中数据加载到data数组里

4、写出txt文件:

#!/usr/bin/env python
# _*_ UTF-8 _*_
#双层列表写入文件
#第一种方法,每一项用空格隔开,一个列表是一行写入文件
data =[ ['a','b','c'],['a','b','c'],['a','b','c']]
with open("test.txt","w") as f: #设置文件对象
    for i in data:  #对于双层列表中的数据
        i = str(i).strip('[').strip(']').replace(',','').replace('\'','')+'\n'
        #将其中每一个列表规范化成字符串
        f.write(i)
        #写入文件
#第二种方法,直接将每一项都写入文件
data =[ ['a','b','c'],['a','b','c'],['a','b','c']]
with open("test.txt","w") as f:
    #设置文件对象
    for i in data:
        #对于双层列表中的数据
        f.writelines(i)
        #写入文件
#第三种方法 将数组写入文件
import numpy as np
#第一种方法
np.savetxt("data.txt",data)     #将数组中数据写入到data.txt文件
#第二种方法
np.save("data.txt",data)        #将数组中数据写入到data.txt文件

以上为常见的读写文件的方法,因为频繁使用Excel与txt,所以将其做个整理,希望能提高效率。

发布了137 篇原创文章 · 获赞 93 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/livan1234/article/details/86493581