Python读 Excel的方式

前言

头大,同一个代码,不同时候,读不同人传过来的excel表格,有时读不出来。不停解决bug,后来自己就写了两套代码,这个读不了,换下一个代码,下面就来讲讲吧!

一、安装包

pandas处理Excel需要xlrd、openpyxl依赖包

pip3 install pandas 
pip3 install xlrd 
pip3 install openpyxl

二、读取excel表格的数据

2.1 pandas 读取excel表格数据的方式

import os
import shutil
import pandas as pd

def get_error_imgs(src_dir, dst_dir, sheetname):
    data = pd.read_excel(sheetname, sheet_name=0) # 默认第一个工作薄,0
    # print(data)
    # # print(data.values)
    # print(data['照片地址'].values)
    imgpathlist = data['照片地址'].values # #查看某一列所有的值
    for file in imgpathlist:
        value_list = file.split('/')
        if "9I" not in value_list:
            continue
        # subdir = os.path.join(dst_dir, '9I')
        img_path = os.path.join(src_dir, value_list[-1])
        if not os.path.exists(dst_dir):
            os.makedirs(dst_dir)
        dst_path = os.path.join(dst_dir, value_list[-1])
        if os.path.exists(img_path):
            print("nihao   !!!!!")
            shutil.copyfile(img_path, dst_path)

def main():
	src_dir = r"D:\test_data\2021-11-18\2021-11-17-9I"
	dst_dir = r"D:\test_data\2021-11-18\2021-11-17-9I2"
	sheetname = r'D:\test_data\2021-11-18\20211117_error.xls'
	get_error_imgs(src_dir, dst_dir, sheetname)
	
if __name__ == '__main__':
    main()

解说

import pandas as pd 
from pandas import DataFrame
#读data = pd.read_excel('1.xlsx') 
#查看所有的值 
print(data.values) 
#查看第一行的值 
print(data.values[0]) 
#查看某一列所有的值 
print(data['标题列1'].values) 
#新增列 
data['标题列3'] = None 
#新增行 
data.loc[3] = ['王五', 100, '男'] 
#删除行:
axis=0
data = data.drop([0,1], axis=0) 
#删除列:
axis=1 data.drop('标题列3', axis=1) 
#保存 
DataFrame(data).to_excel('1.xlsx', sheet_name='Sheet1', index=False, header=True)

2.2 拓展:创建 Excel,写入数据

import pandas as pd 
from pandas import DataFrame 
#写
dic1 = {'标题列1': ['张三','李四'], '标题列2': [80, 90] } 
df = pd.DataFrame(dic1) 
df.to_excel('1.xlsx', index=False) 

# read_excel方法说明 
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, 		engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds) 
# io:excel文件 
# sheet_name:返回指定sheet,默认索引0返回第一个,也可用名称,如果返回多个则可用列表,为None则返回全表 
# header:指定表头,也可用列表指定多行 
# names:自定义列名,长度和Excel列长度必须一致 
# index_col:用作索引的列 
# usecols:读取指定的列,参数为列表,如[0,1]表示第1和第2列

2.3 xlrd读取excel表格数据方式

#!/usr/bin/env python3
# coding: utf-8
import os 
import xlrd
import shutil

# src_dir = f"/home/data1/smf_data/testImg_tabel/1021"
# dst_dir = f"/home/data1/smf_data/testImg_tabel/error"
# 打开excel文件,创建一个workbook对象,book对象也就是fruits.xlsx文件,表含有sheet名
def get_10and11_error_fromsheet(src_dir, dst_dir, sheetpath):
    rbook = xlrd.open_workbook(sheetpath)
    # sheets方法返回对象列表,[]
    rbook.sheets()
    # xls默认有3个工作簿,Sheet1,Sheet2,Sheet3
    rsheet = rbook.sheet_by_index(0)  # 取第一个工作簿

    # 循环工作簿的所有行
    for row in rsheet.get_rows():
        product_column = row[11]  # 品名所在的列
        product_value = product_column.value  # 项目名
        # print(product_value)
        value_list = product_value.split('/')
        # print(value_list)
        if "10J" in value_list:
            subdir = os.path.join(src_dir, "10J")
        elif '11K' in value_list:
            subdir = os.path.join(src_dir, "11K")
        else:
            continue
        print(subdir)
        img_path = os.path.join(subdir, value_list[-1])
        print(img_path)
        if not os.path.exists(dst_dir):
            os.makedirs(dst_dir)
        dst_path = os.path.join(dst_dir, value_list[-1])
        print(dst_path)
        print('########')
        if os.path.exists(img_path):
            print("nihao   !!!!!")
            shutil.copyfile(img_path, dst_path)
            
    print('done')

def get_9i_error_fromsheet(src_dir, dst_dir, sheetpath):
    rbook = xlrd.open_workbook(sheetpath)
    # sheets方法返回对象列表,[]
    rbook.sheets()
    # xls默认有3个工作簿,Sheet1,Sheet2,Sheet3
    rsheet = rbook.sheet_by_index(0)  # 取第一个工作簿

    # 循环工作簿的所有行
    for row in rsheet.get_rows():
        product_column = row[11]  # 品名所在的列
        product_value = product_column.value  # 项目名
        # print(product_value)
        value_list = product_value.split('/')
        # print(value_list)
        if "9I" in value_list:
            subdir = os.path.join(src_dir, "9I")
        else:
            continue
        print(subdir)
        img_path = os.path.join(subdir, value_list[-1])
        print(img_path)
        if not os.path.exists(dst_dir):
            os.makedirs(dst_dir)
        dst_path = os.path.join(dst_dir, value_list[-1])
        print(dst_path)
        print('########')
        if os.path.exists(img_path):
            print("存在   !!!!!")
            shutil.copyfile(img_path, dst_path)        
    print('done')


    # if product_value != '品名':  # 排除第一行
    #     price_column = row[4]  # 价格所在的列
    #     price_value = price_column.value
    #     # 打印
    #     print("品名", product_value, "价格", price_value)

if __name__ == '__main__':
    src_dir = f"/home/data1/smf_data/testImg_tabel/qingdao2/2021-11-18/2021-11-17-9I"
    dst_dir = f"/home/data1/smf_data/testImg_tabel/2021-11-17-9I"  
    sheetpath = f"./20211117_error.xls"     
    # get_10and11_error_fromsheet(src_dir, dst_dir, sheetpath)
    get_9i_error_fromsheet(src_dir, dst_dir, sheetpath)

你可能感兴趣的:(Python全栈,pytorch,深度学习,stm32)