文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 一、如何读取excl文档?
- 二、处理EXCL内容
- 1.基本的 *** 作
- 2.读取特定行列的值并修改
- 3.其他
- 4.上传到服务器
- 总结
前言
python如何读取excl表格内容并上传到服务器
提示:以下是本篇文章正文内容,下面案例可供参考
使用xlrd库
是用来从Excel中读写数据的,但我们通常只用它进行读 *** 作,写 *** 作会相对于装门写入的模块麻烦一些。
正则表达式的学习参考:
https://blog.csdn.net/Weary_PJ/article/details/104079815
代码如下(示例):
import xlrd
import re #正则表达式的库
data = xlrd.open_workbook('D:\test_1.xls')
data.sheets()
table = data.sheet_by_index(0) # 取第一个工作簿
reserve_data = open('D:\test.v','w') #将内容存入test.v文件中
在程序最后使用reserve_data.close() 我理解是关闭文档 不读了。
二、处理EXCL内容 1.基本的 *** 作1将打印内容放到test.v的文档中。:
print ('想要打印的内容',file = reserve_data )
2.中间会用到for循环,可以循环输出打印,并且可以使用双for循环,这里在刚开始使用的时候出现了一个报错,这里会说值太多,没办法处理啥的。
code_name = ('mcok1_ck','mcko2_ck','snrst','TRACECLK')
excl_name = ('o_MCO0','o_MCO1','o_RESET_0','o_TRACE_CLK')
for a,b in excl_name,code_name :
print ('assign {} = {} ;'.format(a,b),file = reserve_data)
解决办法:
for a,b in zip(excl_name,code_name) :
好像是压缩一下,然后运行就不会报错,并且能够双FOR循环了。
在上面用到 .format() 就能够调用a,b中的字符串,依次给到前面的{}中去。输出的结果中不会有{},等于说两个{}分别变成了a和b的内容了。
3.中间还会用到range,表示每次循环从0到3:
当然后面的括号也可以变成range(起始数字,结束数字):
for i in range (0,4):
start=1
end= 100
for i in range (start,end):
4.对齐文档的内容。如果什么也不管,那么输出的文档可以层次不齐,不方便阅读。
format(‘内容’,“符号位+数字 ”)符号位可以是>右对齐 ^ 居中 <左对齐
例表示居中对齐,并且占用14个字符,因为port_count是10个字符所以在左右两遍会补两个空格,如果在^前面添加符号或字母,则补齐的就会是符号或者字母:
print(format('port_count',"^20"))
print(format('port_count',"a^20"))
2.读取特定行列的值并修改
1.读取特定的行和列
因为我的表格内分成5个端口,每个端口都是从0-15,所以第二个FOR循环是从0-15,并且我想要获取绿色那列的所有数据(后面还有3列绿色的数据) 。
:
start = 24
end = 200
for row in range (start,end): #每次处理一行数据,从excl第24行开始到199行结束
for port_count in range (0,16): #从0计数到15
value_AF0 = table.cell_value(rowx=row+port_count, colx=8) # 将行数逐次+1 把第8列的数给value
value_AF1 = table.cell_value(rowx=row+port_count, colx=9) #读每行中第 8,9,10,11列的数据
value_AF2 = table.cell_value(rowx=row+port_count, colx=10)
value_AF3 = table.cell_value(rowx=row+port_count, colx=11)
2.一行写出if else 语句,下面两个例子相等
value_AF1 = '1\'b0' if value_AF1 == "" else value_AF1
if value_AF1 == "" :
value_AF1 = '1\'b0'
else value_AF1
3.其他
1使用列表
list.append(value) 能够将value中的值添加到list列表中去
2在代码前面已经将内容存入list中去,下面程序是寻找list中出现的重复项,并分别打印不同的内容;
list的内容如图:
我需要做的内容是 当名字只出现一次是 打印一次
名字出现2次的 打印两个不同内容。
counter = 0
list_value_read = []
for j in range (int(len(list_value)/5-1)):
some = str(j*5)
counter = 0
if some not in list_value_read:
for i in range(j*5,int(len(list_value)-5),5):
if list_value[j*5] == list_value[i+5]:
counter = counter + 1
list_value_read.append(str(i))
#count == 1 当发现重复的时候,输出两行代码:
print('assign {} =( p{}{}_af == {} ) ? p{}_i[{}] :'.format(list_value[j*5],list_value[j*5+1],list_value[j*5+2],list_value[j*5+3],list_value[j*5+1],list_value[j*5+2]),file=reserve_data)
print(' ( p{}{}_af == {} ) ? p{}_i[{}] : {} ;'.format(list_value[i+5+1],list_value[i+5+2],list_value[i+5+3],list_value[i+5+1],list_value[i+5+2],list_value[i+5+4]), file=reserve_data)
if counter == 0 :
print('assign {} = (p{}{}_af == {} ) ? p{}_i[{}] : {} ;'.format(list_value[j*5],list_value[j*5+1],list_value[j*5+2],list_value[j*5+3],list_value[j*5+1],list_value[j*5+2],list_value[j*5+4]),file=reserve_data)
4.上传到服务器
#该模块作用:将生成的点V文件########################################################################
from ftplib import FTP #加载ftp模块
IP = '10.0.11.11'
user = 'hardware'
password = 'icube123'
filename = 'test.v'
path = 'D:\test.v'
ftp=FTP() #设置变量
ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.connect(IP) #连接的ftp sever和端口
ftp.login(user,password)#连接的用户名,密码
ftp.storbinary('STOR %s'%filename, open(path, 'rb',21)) #storbinary是以二进制形式上传文件。
print('success')
总结
本次使用python是为了维护pin_mux的文档,方便设计,节约时间,但是初次学习python代码写的又臭又长,def 和class不会用,下次学习使用这两个,解决重复使用代码的问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)