因为需要读取LCZ分类Excel中的多标签,正在学习如何操作。记录一波~
1、要先学习怎么在pycharm上完成远程操作
Terminal
Python的交互式模式,可以直接输入代码,执行,并得到结果。
Python Console
命令行模式,与系统的CMD一样,运行各种系统命令。
感觉与ssh中直接运用Linux语法是一样的。
2、代码运行
借鉴代码连接:零基础使用Python读写处理Excel表格
pyhton版本:3.7
操作界面:pycharm
运行平台:远程GPU(太难了…一切尽在摸索之中)
先在Python Console中安装好库
pip install xlrd
运行读取代码
import xlrd
#打开excel文件
def open_excel(file='test.xlsx'):
try:
data = xlrd.open_workbook(file)
return data
except Exception as e:
print(str(e))
#根据名称获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的索引 ,by_name:Sheet1名称
def excel_table_byname(file='test.xlsx',colnameindex=0,by_name='sheet1'):
data = open_excel(file) # 打开excel文件
table = data.sheet_by_name(by_name) #根据sheet名字来获取excel
nrows = table.nrows #行数
colnames = table.row_values(colnameindex) #某一行数据
list = [] #装读取结果的序列
for rownum in range(0,nrows): #遍历每一行的内容
row = table.row_values(rownum) #根据行号获取行
if row: #如果行存在
app = [] #一行的内容
for i in range(len(colnames)): #一列列地读取行的内容
app.append(row[i])
list.append(app) #装载数据
return list
def main():
tables = excel_table_byname()
for row in tables:
print(row)
if __name__=="_main_":
main()
遇到的问题
- 代码运行没有错误,但是结果没有显示。
解决方法:因为main的左右两侧也是要两个_ 的。 - 另一个报错:No sheet named <‘sheet1’>
解决方法:把sheet1的名字改成别的就行了。
3、更新一下代码
import xlrd
def open_excel(file='wpaa.xlsx'): #感觉最好用绝对路径,比相对路径更保险点
try:
data = xlrd.open_workbook(file)
return data
except Exception as e:
print(str(e))
def excel_table_byname(file='wpaa.xlsx', colnameindex=0, by_name='Sheet1'):
data = open_excel(file) # 打开excel文件
table = data.sheet_by_name(by_name) # 根据sheet名字来获取excel
nrows = table.nrows # 行数
colnames = table.row_values(colnameindex) # 某一行数据
list = [] # 装读取结果的序列
for rownum in range(0, nrows): # 遍历每一行的内容
row = table.row_values(rownum) # 根据行号获取行
if row: # 如果行存在
app = [] # 一行的内容
for i in range(len(colnames)): # 一列列地读取行的内容
app.append(row[i])
list.append(app) # 装载数据
return list
def main():
tables = excel_table_byname()
list_image = []
list_label = []
list_label_1 = []
for row in tables:
list_image.append(row[2])
for i in row[5:22]:
if i == "null":
list_label_1.append(0)
else:
list_label_1.append(1)
list_label.append(list_label_1)
list_label_1 = []
return list_image, list_label
if __name__ == "__main__":
image, label = main()
print(image)
print(label)
对行列读取中,只读取图片的路径与每个图片中的多标签。在17类标签中,当显示null则用0表示,反之显示为LCZ1、LCZ2、…、LCZG则显示为1。