分类目录归档:学习

PYTHON学习之sorted函数

PYTHON是一种非常灵活的语言,可以用来快速开发,语言简洁,而且功能强大,最近在处理数据时遇到了排序的问题,使用了SORTED函数,不得不感叹PYTHON的强大。

问题描述:遍历输出一个字典数据,输出前按照KEY的第9至12位数据进行排序。

第一步,认识sorted函数

Sorted可以对所有的可迭代对象进行排序,在PYTHON中,list、tuple、set、dict等数据结构都是可迭代的对象,因此都可以使用sorted函数进行排序,尤其是要进行遍历输出的时候,非常方便。sorted的语法是:

sorted(iterable, key=None, reverse=False)

iterable是可迭代的对象,key是排序的关键字,reverse是排序的顺序,默认是升序

第二步,认识lambda函数

lambda是匿名函数,不用单独定义,使用起来方便,正常的函数必须先定义,再使用。而lambda只用简单定义,即可实现一个函数的功能。

常规函数的定义和使用:

def sum(x,y):
return x+y
result=sum(5,3)

使用lambda定义匿名函数:

sumFunc=lambda x,y:x+y
result=sumFunc(5,3)

第三步,解决问题

所要排序的数据时一个字典,排序的依据是KEY中的第9至12位数据,然后输出字典里面的数据。

for item in sorted(myDict,key=lambda item:item[9:12])
print(item,myDict[item])

电子投标回执中的文件指纹或唯一码验证

电子投标不同于纸质投标,纸质投标打印、盖章等一系列环节都能够用眼睛看到,发现了过去也能够修改。但是电子标就不同了,一切操作都在电脑中进行,不如纸质标有把握,就比如说上传投标文件之后,有没有怀疑传错了文件之类的想法?今天就来说说这个问题,以及解决办法。

解决该问题最好的办法就是在电脑上保留唯一的投标文件材料,在电子标书制作过程中,可能保留很多副本,盖章以及生成最终的投标文件时,也可能为了测试,电脑上保存了很多副本。这样的行为很常见,比如此次测试时将电子投标文件保存到了一个地方,下一次再生成时,又放在了另一个地方。切记,不要在电脑上保存多个副本,有时候选择的时候,文件名一样,如果不注意路径,很可能就选错了。

那么上传之后,如何核实该文件跟本地的文件一致呢?答案很简单,就是利用文件指纹验证。大部分系统上传投标文件时,都会有打印回执的地方,回执里面显示了上传的时间,名称等信息,最后面还一个文件指纹或者唯一码,利用该信息就能够验证上传的是否跟本地是同一个文件。

文件指纹是一串大写字母或数字组成的字符串,相同内容生成的文件指纹一样。因此我们只需要将本地投标文件生成文件指纹,然后对比就可以了。生成文件指纹的简单方法是:

第一步,按WIN+R键,运行CMD,打开命令行工具,然后进入投标文件保存的地址。

第二步,生成文件的指纹,常见的是MD5编码或者是SHA编码,具体命令如下:
certutil.exe -hashfile filename -MD5
certutil.exe -hashfile filename -SHA1
certutil.exe -hashfile filename -SHA256
filename就是相应的文件名称。

对网站的WORDPRESS进行更新

网站的WORDPRESS很久没有更新了,包括里面的主题和插件,一是怕出错,以前出错过一次,后来做的手动更新;二是网站空间PHP版本比较旧,不支持较新的WORDPRESS;三是主题里面更改的内容怕是又得重新更改,实在是麻烦,不愿意折腾了。最近网站出了问题,很多快照被换成了广告,寻思有可能系统太久没有更新,有漏洞,才出现这样的问题。

在进入空间,查看文件是否被修改时,发现网站空间支持的PHP版本由之前的5点几,自动调整成了7点几。以前没有更新WORDPRESS的原因之一是PHP的版本低,现在终于不受这个因素限制了,于是备份好网站后,点击WORDPRESS更新,很快更新完了。同时对各种插件和主题也进行了更新,一步到位,确保以后不再受病毒的攻击。

旧主题修改过样式表,此次还得修改,只不过这次使用的是主题编辑器中的“额外CSS修改”,将CSS代码放在这里面,不用修改原主题,也不用担心出错。

另外,主题的HEADER.PHP和FOOTER.PHP也需要修改,其实很早就听说过建立子主题,有什么需求都在子主题里面修改,原主题不用动。这样主题就能选择自动更新,每一次更新只对原主题更新,子主题不变,不用每一次修改原主题。不过,最近懒得折腾,希望以后有时间再建立一个子主题吧,原主题选择自动更新,有利于网站安全。

PYTHON数据结构学习之集合SET

PYTHON中的SET是一个无序且不重复的集合,第一次用到SET是有大量的元素需要去除重复,只留下唯一的元素,类似于数据库的DISTINCT关键字运算。当然,SET除了去除重复功能之外,还能进行集合的运算,比如集合的交、并、差,用起来非常方便。今天就来学习学习PYTHON中的集合SET。

1 SET的表现形式

列表的关键词是LIST,用[]表示;元组的关键词是TUPLE,用()表示;集合的关键词是SET,用set()或者花括号表示(花括号中必须有元素)。

2 SET的创建

sets=set()                 #创建空集合
sets={1,2}                 #创建两个元素的集合
sets=set([1,2])        #通过迭代对象创建

3 SET添加与删除

sets.add(value) #添加元素
sets.remove(value) #删除某元素
sets.discard(value) #删除某元素(如存在)
sets.update([1,2,3]) #添加多个元素
sets.clear() #删除所有元素

4 SET的交、并、差操作

#先定义两个集合
a={1,2,3}
b={3,4,5}

#交集运算
a&b
#并集运算
a|b
#差集运算
a-b 或者 b-a

5 其它

在使用的过程中,还用到了两个功能,一是统计集合的个数:len(sets);二是对集合的元素排序,sorted(sets),由于集合是无序的,因此sorted(sets)返回的是一个列表。

PYTHON数据结构学习之RANGE

程序有三种控制结构,顺序、循环和选择,顺序就是1、2、3、4一条一条地执行,循环对一个集合的每一个元素进行操作,选择则是有条件地执行语句。在C、JAVA之类的语言中,循环语句常见的有for,for(i=0;i<n;i++){}就是循环n次,执行{}里面的内容。但是在PYTHON中for语句不是这样写的,通常的写法是for i in range(10),那么range是什么意思呢,今天就来学习一下。

for i in range(10),首先range是一个对象,也是一个序列,因此能够使用in 这个关键字,意思是在某某里面,for 对于range对象里面的每个元素进行遍历。

一、RANGE的创建

range(stop)                       #默认从0开始,小于等于stop-1
range(start,stop[,step])     #按照开始、结束生成序列,步长可以设置,相当于[0,stop),含前不含后,下面是一些例子。start没填,默认为0,step默认为1。

data=range(10)               #创建序列[0,10)
data=range(0,10)            #创建序列[0,10)
data=range(0,10,2)         #创建序列[0,10),步长为2

二、RANGE的方法

data.count(3)                 #统计元素3出现次数
data.index(3)                  #返回元素3的位置
data.start                        #range的起始值(含)
data.stop                        #range的终止值(不含)
data.step                        #range对象的步长

三、其他FOR循环方式

刚才说过,for i in range(19),range只是序列,因此这不是唯一的表达方式:也可以用下面几种:

for i in range(10)
for i in (0,1,2,3,4,5,6,7,8,9)
for i in [0,1,2,3,5,6,7,8,9]

PYTHON数据结构学习之元组TUPLE

上次学习了列表LIST,这次学习元组TUPLE,这两个数据结构非常像,可以说TUPLE跟列表一样,只不过是不能修改的。因此如果存储常量时,可以使用元组,不用担心数据被修改。但是如果存储的某个元素是列表,那么这个列表中的元素是可以修改的。

1 创建元组

arr=()              #创建一个空元组
arr=tuple()     #创建一个空元组
arr=1,             #创建元组,只有1
arr=(1,)           #创建元组,只有1
arr=tuple([1,2,3]) #从可迭代数据创建

也就是说,创建元组时,逗号很关键,可以没有括号,但是得有逗号。

2 元组的方法

LIST有很多方法,TUPLE与列表类似,但是它是只读的,因此方法很少,没有添加和修改元素的方法。

arr.count(1)       #统计元素1的个数
arr.index(1)       #查找元素1的位置

3 元组的其它方法

元组和列表一样,属于可迭代类型数据,因此有一些通用方法,比如min,max,sum,x in arr,x not in arr等操作。

4 元组的遍历

遍历方面,与列表相同。

PYTHON数据结构学习之列表LIST

“人生苦短,我用Python”说得很有道理,如果使用PYTHON进行数据处理,解决业务问题,而不是为了专门研究技术的话,PYTHON确实是一个不错的选择。不用考虑太多的技术细节,只用几句简单的程序就能解决复杂的数据处理问题,那么何乐不为呢?!

最近在学PYTHON,看到了列表这种数据结构,List一点也不陌生,因为数据结构与算法里面讲过链表,经常使用list这个单词。PYTHON里面的列表,就是由N个元素组成的序列,放在[]中,用逗号隔开,元素可以是整数、实数、字符串、列表、元组等任何类型,并且每个元素的类型也可以是不一样的,总之看起来十分灵活。

1 列表的创建

arr=list()                   #创建空列表
arr=[1,2,3,4,5,6]      #直接赋值创建
arr=list(“abcd”)        #根据一个可迭代的数据创建

PYTHON列表中的元素类型非常灵活,并不是像C语言的array那样,整形全是整形,字符型全是字符型,它们可以是任意一种数据类型,例如:
arr=[1,”a”,”abc”,[2,3],(4,5)]
该列表,第1个元素为数字1;第2个为字符“a”,第3个为字符串”abc”,第4个为列表,第5个为元组。 继续阅读PYTHON数据结构学习之列表LIST

一次瑞波币购买经历

第一次认识虚拟货币的时候是比特币,2017年互联网爆发了勒索病毒,该病毒不删除电脑的文件,而是对电脑中的文件进行加密,并向电脑的主人索要一定量的比特币作为赎金,然后文件才能解密,否则永远也解不开。这就是第一次听说虚拟货币比特币,当时出于好奇在5月份购买了不到一万块钱的虚拟币,主要是莱特币和狗狗币因为当时比特币快到一万了,比较贵,相比之下莱特币和狗狗币价格还是比较便宜。由于价格波动太大,暴涨和暴跌情况经常发生,心里承受不了压力,在加上当年9月国家发布了监管文件,最终选择了退出,不赚不赔。

最近又听到朋友提到狗狗币,狗狗币在一天之内涨了8倍,骇人听闻,回头看一看各种货币都比以前有很大程度的涨幅,有的已经十几倍了,于是打算再买一些虚拟币碰碰运气。1月30日,看到几乎所有的主流虚拟币在下跌,只有瑞波币增速在3%左右,过了一会还是这样,于是打算购买瑞波币碰碰运气,似乎只有这个才会爆发。

按照当时的想法,说干就干,购买了1000元的瑞波币试试,谁知一第二天晚上,1000元变成了将近2000元,几乎涨了一倍。看到这样的情况,打算继续追涨,又买了4000元的瑞波币,似乎瑞波币要爆发了。总共投入了5000元的本金,经历了周六晚上和周日的上涨。周一上班,用于购买虚拟币的平板在家里面,行情看不到,一天心里一直有些忐忑。晚上回到家,看到行情吃了一惊,当天最高上涨70%,是近三年最大的单日涨幅,终于忍受不了心里的煎熬,在增速52%的时候果断全部抛了,挣了3700元。
继续阅读一次瑞波币购买经历

PYTHON登录FTP服务器下载文件

最近需要定时从FTP服务器上面下载文件,做简要分析,由于是日常工作,工作量大,但是没有技术含量,纯粹是消耗时间,于是决定尝试使用PYTHON写程序,每天自动下载。使用FTP下载的方法很多,使用PYTHON写程序之前用过两种方法,一种是用我的电脑打开FTP,登录之后复制想要的文件;第二种是使用DOS批处理文件来下载,第二种比第一种效率要一些。下面就来说说这些下载方法:

一、我的电脑访问

这种方法最简单,直接在我的电脑地址栏中输入FTP服务器地址,输入用户名和密码,就可以下载所需的文件。缺点是,每天都需要打开一次,输入用户名和密码,一次使用可以,每天都这样还是比较繁琐的。

二、DOS批处理

将FTP服务器地址、用户名、密码,以及文件存放的目录等内容保存好,一运行,就能自动登录,并下载所需的文件。该方法需要写两个bat文件,getFtpData.bat用于保存FTP命令,main.bat用于调用getFtpData.bat文件,使用该方法非常简单。

getFtpData.bat:
open ***.***.***.**
user username password
cd data
get plan1.csv
get plan2.csv
get plan3.csv
bye

main.bat:
ftp -n -s:”getFtpData.bat”
继续阅读PYTHON登录FTP服务器下载文件

PYTHON合并CSV文件的实践

最近尝试使用PYTHON处理CSV数据,由于CSV文件有好几个,需要提前拼接,然后再处理,因此遇到了PYTHON对文件进行合并的问题。此次尝试了两种方法:一是调用CMD命令处理;二是使用PYTHON写程序处理,经过尝试,觉得第一种方法简单实用。假设文件夹下面有NCSV文件,要将这些文件都汇总到data.csv,下面使用上述两种方式实现:

一、调用CMD命令合并文件

command=”type %s >>%s” % (filename,newFileName)
os.system(command)
DOS命令TYPE的作用是将文件内容显示出来,跟LINUX相似,可以重定向但文本中,因此可以遍历该目录下面所有的CSV文件,生成DOS命令,然后执行,就能够将多个CSV文件合并到一个文件里面。类似下面多个命令:
TYPE one.csv >>data.csv
TYPE two.csv >>data.csv
TYPE three.csv >>data.csv

使用该方法的特点是比较简单,直接调用DOS命令就能够将文件合并了,并不用打开文件读取文件内容,再写入到新的文件。

二、使用PYTHON程序合并文件

这种方面是读取CSV文件的每一行,然后追加到目标文件里面,这里使用with open语句打开。遍历这个文件夹下的所有.csv文件,然后逐个打开,一行一行追加到新文件中。

with open(item,”r”) as src,open(newFile,”a”) as des:
for line in src:
des.write(line)