头大,同一个代码,不同时候,读不同人传过来的excel表格,有时读不出来。不停解决bug,后来自己就写了两套代码,这个读不了,换下一个代码,下面就来讲讲吧!
pandas处理Excel需要xlrd、openpyxl依赖包
pip3 install pandas
pip3 install xlrd
pip3 install openpyxl
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)
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列
#!/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)