19 Nov 2019
Anaconda集成了许多科学计算所需要的包,例如numpy,scipy等,那么如何查看anaconda中有哪些第三方包,并且如何去安装那些没有覆盖的包?首先得了解一下,anaconda有一个命令行编辑窗口,名为anaconda powershell prompt,我们可以在开始菜单中找到它,如下图:
· 查看anaconda中已经安装好的包有哪些?
conda list
· 如何安装anaconda中没有覆盖的第三方包?
pip install package_name
02 Jul 2019
近期项目总遇到csv格式文件,遂记录一下该文件的读取、清洗及写入方式,供大家参考:
原始数据下载地址:test_new.csv
Python实现代码如下:
import csv
infile = "d:\\test_csv.csv"
outfile = "d:\\test_new.csv"
datas = []
with open(infile, "r") as f:
reader = csv.reader(f)
header = next(reader) # 跳过表头
for row in reader:
row = [_.replace(",", ",") for _ in row] # 替换文本中的关键字
if row[3] and row[4]: # 字段不为空
datas.append(",".join(row[0:-1]).replace("\n", ""))
print("\n".join(datas), file=open(outfile, "w", encoding="gbk"))
18 Jun 2019
最近遇到了需要批量剔除某列字段的需求,虽然很简单,但想着今后可能还会复用,遂在此记录一下。
原始数据下载地址:test_dir.zip
Python实现代码如下:
# ==== 单个文件提取任意字段 ====
import os
ftxt = "D:\\test_dir\\test01.txt"
contents = []
with open(ftxt, "r", encoding="utf-8") as f:
mylist = list(f) # 将字符串转化为数组
for i in mylist:
content = i.replace("\n", "").split("\t") # 将数据划分为不同的列
s = "".join(content[2]+"\t"+content[3]) # 提取/剔除任意列
contents.append(s)
with open(ftxt, "w", encoding="utf-8") as f: # 将结果写入文件
if isinstance(contents, list):
for content in contents:
f.write("{0}{1}".format(content, os.linesep))
else:
f.write(contents)
# ==== 批量提取任意字段 ====
import os
ftxts = "D:\\test_dir\\"
for root, dirs, files in os.walk(ftxts):
for n in files:
ftxt = root + n
contents = [] # 注意contents位置
with open(ftxt, "r", encoding="utf-8") as f:
mylist = list(f) # 将字符串转化为数组
for i in mylist:
content = i.replace("\n", "").split("\t") # 对数据进行划分
s = "".join(content[-2] + "\t" + content[-1]) # 提取任意字段
contents.append(s)
with open(ftxt, "w", encoding="utf-8") as f:
if isinstance(contents, list):
for content in contents:
f.write("{0}{1}".format(content, os.linesep))
else:
f.write(contents)
10 Jun 2019
最近在跟进项目的时候,遇到了一个数据清洗的需求,该需求要求按照双引号成行,以竖线分隔,将txt文件转换成csv文件。
原始数据下载地址:1.txt
Python实现代码如下:
fpath = "d:\\1.txt"
with open(fpath, "r", encoding="utf-8") as f:
datas = [_.replace("\n","") for _ in f.readlines()]
datas = "".join(datas).split("\"\"")
print(len(datas))
tmp = []
for i, data in enumerate(datas):
data = data.replace("\"","").split("|")
data_num = len(data)
if data_num >= 3:
tmp.append(",".join(["",data[0],"","",data[1],data[2],""]))
else:
print("line:{0}, context:{1}".format(i + 1,data))
datas = ["序号, id号, 时间, 电话, 标题, 摘要, 反馈内容"] + tmp
print("\n".join(datas), file=open("d:\\1.csv","w",encoding="gbk"))
11 Feb 2019
在对系统进行压力测试的时候,时常会遇到造数据的需求,所谓造数据其实就是将一小批数据不断的复制从而变成一个大的集合。由于之前看到一些造数据的小脚本过于笨拙,遂给大家介绍一种简易批量复制数据的方法。
原始数据下载地址:copyfile_test.rar
Python实现代码如下:
import os
import shutil
rootdir="d:\\test\\" #原文件路径
for file in os.listdir(rootdir): #批量读取文件
count = 0
while count < 30: #需要复制的份数
count += 1
shutil.copyfile(rootdir+file,rootdir+str(count)+file) #批量复制文件
16 Nov 2018
最近拿到一批TAG格式的文件,需要对其进行预处理以得到我们想要的标准TXT文本格式。TAG文件与TXT文件内容如下:
.TAG文件
<Speaker 1> male
<Speaker 2> male
<Speaker 0> <[ENS]> 0 1.571 [ENS]
<Speaker 0> <[MUSIC]> 1.571 4.485 [MUSIC]
<Speaker 0> <[BELL]> 4.485 15.535 [BELL]
<Speaker 0> <[ENS]> 15.535 21.091 [ENS]
<Speaker 1> <Chinese-talk> 21.091 21.731 喂你好
<Speaker 2> <Chinese-talk> 21.731 22.73 喂喂
<Speaker 1> <Chinese-talk> 22.73 29.867 嗯您好,呃广发银行信用卡中心,我姓韩工号b s一七八九,呃请问一下是段光润段先生吗
<Speaker 0> <[ENS]> 29.867 30.507 [ENS]
<Speaker 2> <Chinese-talk> 30.507 30.982 对
<Speaker 0> <[ENS]> 30.982 31.719 [ENS]
<Speaker 1> <Chinese-talk> 31.719 33.193 您好啊,不好意思打扰您了
<Speaker 0> <[ENS]> 33.193 33.736 [ENS]
<Speaker 1> <Chinese-talk> 33.736 41.678 呃这边从系统啊留意到段先生您近期使用广发银行信用卡,这边在三月七号到三月二十四号有三笔刷卡消费
====转换后的文件样例====
.TXT文件
坐席 喂你好 21.091 21.731
客户 喂喂 21.731 22.73
坐席 嗯您好,呃广发银行信用卡中心,我姓韩工号b 22.73 29.867
客户 对 30.507 30.982
坐席 您好啊,不好意思打扰您了 31.719 33.193
坐席 呃这边从系统啊留意到段先生您近期使用广发银行信用卡,这边在三月七号到三月二十四号有三笔刷卡消费 33.736 41.678
10 Oct 2018
最近偶得一个Python的练习题库,感觉有必要的同学可以通过刷题进一步了解python处理技巧。这里提供习题的相关链接及解决程序,供大家参考。
· 编号867:转置矩阵
给定一个矩阵 A, 返回 A 的转置矩阵。
# 输入:[[1,2,3],[4,5,6],[7,8,9]]
# 输出:[[1,4,7],[2,5,8],[3,6,9]]
# 相关程序:
import numpy as np
np.transpose([[1,2,3],[4,5,6],[7,8,9]]).tolist()
# 注意:输入需要是个完整的矩阵,内容可以是数字或字符串
27 Aug 2018
在处理数据的过程中,我们会遇到各种各样关于转置的问题,今天讲一种特殊的分组转置需求:按行进行分组转置,要求从每行第2个词开始,与每行第1个词拼接成一个新行。
数据样例如下:
#==== 原始数据样例 ====
人 士 人物 人氏
人手 人员 人口
#==== 转置后数据样例 ====
人 士
人 人物
人 人氏
人手 人员
人手 人口
原始数据下载地址:synonyms.txt
Python实现代码如下:
infile=open("d:\\test.txt","r",encoding="utf-8").readlines()
for i in infile:
_s = "\ufeff"
if i.startswith(_s):
i = i[len(_s):]
_arr = i.strip().split("\t")
for _s in _arr[1:]: #从每行第2个词开始循环遍历
print("{0} {1}".format(_arr[0], _s)) #输出每行第1个词及对应词
22 Jun 2018
在处理文件时经常需要对文件进行转码,文件编码类型如下表:
编码类型
编码描述
ANSI码
多用于英文字母及数字(存储汉字容易报错)
Unicode
包含:汉字、英文字母、数字及各国通用语言
UTF-8
可变长度的Unicode(最常用)
GBK编码
面向汉字的编码(最少用)
大家可先创建几个ANSI编码类型的测试文件,我们试图将ANSI文件转换为utf-8,相关代码如下:
import os
import pandas as pd
# 最终转换的文件编码格式
coding = 'utf-8'
# 需要修改的文件夹路径
file_dir = 'D:\\test\\'
def run_coding():
for root, dirs, files in os.walk(file_dir, topdown=False):
for i in files:
files_name = os.path.join(root, i)
try:
df1 = pd.read_csv(files_name, encoding='utf-8')
except:
df1 = pd.read_csv(files_name, encoding='gbk')
df1.to_csv(files_name, encoding=coding,index=None)
if __name__ == '__main__':
run_coding()
print("Finish translate")
23 Apr 2018
在清洗数据的时候,经常会遇到剔除多余列/行的问题,行剔除在文本拆分的时候已经教给大家,这里主要来说一下剔除多余列。
原始数据下载地址:t93012254_20150605_120224.wav
Python 剔除多余列程序如下:
filepath = "d:/t93012254_20150605_120224.wav"
file = open(filepath, "r", encoding="utf-8").readlines()
for line in file:
a = [line.strip().split("\t")[-2:]]
# [-2:]表示保留倒数两行,注意加[]形成列表,方便后续遍历
# print(a)
for l in a: # 修正列表格式
print("\t".join(l))
# 输出结果如下
您 坐席
可能 客户
要先办不回来十三 坐席
啊那个 客户
账单还有一个因为广发卡还一共是工商的好像可以然后点击一下如果是将那个他他维修刚才那个我们一个月二千股具体到您以后可以高一点是到期还也可以块八的分期给您的然后这个啊这个案子完了小而专一张保单给人对都是暗提升网站了刚办人家有新一百万咱们能改 坐席
嗯嘛这个什么时候的啊 客户
因为因为想要办你帮我点进去还是三个三笔赔到位就行财网在看了 坐席
啊麻烦所以 客户
您因为您这个块钱其他方面的呢 坐席
嗯我想想确认一下这张卡嘛我都这样啊 客户
21 Apr 2018
工作中经常会遇到用split()函数切分字符串的问题,但有时我们会看到一段话中有多种符号用来分隔,例如”字段1,字段2*字段3|字段4”,这时我们就需要借助re正则表达式包来实现多分隔符切割原始数据的方法。
Python 多分隔符切分数据程序如下:
import re
text = "字段1,字段2*字段3|字段4"
list = re.split("[,*|]",text)
print(list)
# 输出结果如下
['字段1', '字段2', '字段3', '字段4']
# 若需要剔除字段1,可直接写
import re
text = "字段1,字段2*字段3|字段4"
list = re.split("[,*|]",text)
print(list[1:4])
# 输出结果如下
['字段2', '字段3', '字段4']
27 Mar 2018
工程师朋友让我帮忙改一下Python脚本,业务场景是有现有两份csv文件,一张fcsv存放原始数据,一张fcsv_new存放更新数据,现在需要把更新的数据追加到原始表中
Python csv纵向合并程序如下:
import csv
fcsv="d:\\test\\20180323HF.csv" # 定义文件路径
fcsv_new="d:\\test\\20180323HFnew.csv"
reader_new = csv.DictReader(open(fcsv_new,encoding="utf-8")) # 读取fscv_new的数据
header = reader_new.fieldnames # 读取fscv_new的字段名
with open(fcsv,'a',encoding="utf-8") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=header)
writer.writerows(reader_new) # 将fcsv_new写入fcsv
reader = csv.DictReader(open(fcsv,encoding="utf-8")) #读取合并后的fcsv
for row in reader:
print(row)
23 Mar 2018
WingIDE安装总会遇到各种各样的麻烦,其破解方法也是作为一个Hacker基本应该有的“职业素养”,多说无益动手尝试一下吧!
· WingIDE安装
(1)登陆WingIDE官网选择企业版
(2)选择合适的包,博主用的是Linux32位的系统,WingIDE版本号为5.0.9
(3)选择5.0.9后,需要选择Linux32-bit,然后进入真正的下载页面
(4)下载完成后,会有一个wingide*.deb的包,需要拷贝到Linux虚拟机
(5)执行如下安装语句,会出现依赖包未安装的问题
#注意路径
dpkg -i wingide5_5.0.9-1_i386.deb
(6)手动下载安装依赖包libqt4-webkit,若还有问题可参考百度软文kali linux 安装wingide
(7)将libqt4-webkit*.deb考到linux系统下,并执行如下语句安装
dpkg -i libqt4-webkit_4.8.6+git64-g5dc8b2b+dfsg-3+deb8u1_i386.deb
22 Mar 2018
最近在利用Python研究渗透测试(黑客技术),Kali作为一款非常好用的渗透测试操作系统是值得我们花精力去安装的。在网上搜罗了一篇详细的Kali安装指南,鉴于该博文中文输入法安装不上的问题,博主另外写一篇博文进行修正。
(1)修改Kali源路径 ,并更新系统
切换到root用户(一般我们都是root用户登录,基本可忽略),在终端输入打开sources.list文件
leafpad /etc/apt/sources.list
在sources.list文件中添加(虽然也有其他的kali-rolling版本,但感觉中科大的最好用)
#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
修改完成后,更新系统
apt-get update && apt-get upgrade
(2)安装google拼音
apt-get install fcitx-googlepinyin
如果安装过程中提示依赖关系有问题:
apt-get install -f
(3)重启后,Ctrl+空格 切换输入法
参考博文:kali国内更新源+中文输入法安装+SSH
01 Nov 2017
本文纯属博主日常Linux操作记录,用于查询不考虑编写顺序
[root@localhost ~]#
root:当前登录用户
localhost:主机名
~:当前所在目录(家目录)
#:超级用户提示符 ==> 家目录(/root)
$:普通用户提示符 ==> 家目录(/home/user01)
文件类型(- 文件;d 目录;l 快捷方式)
命令格式:
命令 [选项] [参数]
例:查询目录内容
ls [选项] [文件或目录]
ls -a 显示所有文件,包括隐藏文件(.开头)
ls -l 显示详细信息(也可用ll)
下载器:
更新系统(不建议使用apt-get dist-upgrade,会导致文件不匹配卸载的情况)
apt-get update && apt-get upgrade
下载安装文件
apt-get install [文件名]
安装过程中存在依赖关系
apt-get install -f
知道网址下载方法:
wget [粘贴网址]
不同类型文件解压:
tar -xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar -xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
27 Oct 2017
程序设计基本结构包括:顺序结构、选择结构、循环结构,Python中任何算法都可以通过这3种基本结构的排列组合来实现。
在介绍Python程序设计结构之前,童鞋们需要储备程序流程图的相关知识如下:
据此,Python程序设计3种基本结构的流程图如下:
· 顺序结构实例
顺序结构其实贯穿于所有的Python程序之中,这里给出一个“Hello World”的小例子
#Input输入数据
str1 = "Hello"
str2 = "World"
#Process处理数据
str_add = str1+" "+str2
#Output输出数据
print(str_add)
· 选择结构实例
选择结构包含:多分支(if…elif…else…)和异常处理(try…except…),由于异常处理机制对于数分师来说并不是重点,因此这里不再赘述,有兴趣的童鞋请参阅:Python异常处理
接下来,举一个选取最大值的实例,以帮助童鞋理解Python选择结构中的多分支问题。实例需求:从x1,x2,x3三个数中,选取最大的数并输出。
# 共4种解决方法,代码由繁琐到简洁依次排列
x1=1
x2=2
x3=3
# ==== 通盘比较 ====
if x1>x2 and x1>x3:
max_n=x1
elif x2>x1 and x2>x3:
max_n=x2
else:
max_n=x3
# ==== 决策树 ====
if x1>x2:
if x1>x3:
max_n=x1
elif x2>x3:
max_n=x2
else:
max_n=x3
# ==== 顺序处理 ====
max_n = x1
if x2>max_n:
max_n=x2
if x3>max_n:
max_n=x3
print(max_n)
# ==== Python内置函数 ====
max_n=max(x1,x2,x3)
#输出结果
print(max_n)
3
· 循环结构实例
期望用Python编译循环结构实例,首先要了解循环类型和循环控制语句,循环类型包括for循环和while循环两种,其配套的循环控制语句也有break语句和continue语句两种,详情可参考: Python循环语句
循环类型
样例描述
for循环
for in :
while循环
while :
循环控制语句
样例描述
break语句
循环执行过程中终止并且跳出整个循环
continue语句
循环执行过程中终止并且跳出该次循环,执行下次循环
这里给出计算平均值的实例,各位可以比较一下不同代码之间的优劣性,实例如下:
# ==== for循环 ====
n = eval(input("how many numbers?"))
sum = 0
for i in range(n):
x = eval(input("enter a number >>"))
sum += x
print("\nThe average is",sum/n)
# 输出结果
how many numbers?3
enter a number >>10
enter a number >>20
enter a number >>30
The average is 20.0
# 缺点:需要提前定义输入数据的个数
# ==== while循环 ====
sum = 0
count = 0
moredata = "yes"
while moredata[0] == "y": #moredata首字母为y,执行循环
x = eval(input("enter a number >>"))
sum += x
count += 1
moredata = input("do you have more numbers(yes or no)?")
print("\nThe average is",sum/count)
# 输出结果
enter a number >>10
do you have more numbers(yes or no)?y
enter a number >>20
do you have more numbers(yes or no)?y
enter a number >>30
do you have more numbers(yes or no)?n
The average is 20.0
# 缺点:虽无需计数,但又总被提示信息打扰
# ==== while哨兵循环 ====
sum = 0
count = 0
xStr = input("enter a number (<ENTER> to quit) >>") #while执行前需定义xStr
while xStr != "": #xStr为空时,退出循环
x = eval(xStr)
sum += x #若将x换成xStr,当xStr为空时,表达式不成立
count += 1
xStr = input("enter a number (<ENTER> to quit) >>")
print("\nThe average is",sum/count)
# 输出结果
enter a number (<ENTER> to quit) >>10
enter a number (<ENTER> to quit) >>20
enter a number (<ENTER> to quit) >>30
enter a number (<ENTER> to quit) >>
The average is 20.0
# 缺点:需用户手动输入数据,不能自动读取文件数据
# ==== 文件循环 ====
# average1.txt 文件内容如下
10
20
30
fileName = "D:\\average1.txt" #读取D盘中的txt文件
infile = open(fileName,'r')
sum = 0
count = 0
for line in infile:
sum = sum + eval(line)
count = count + 1
print("\nThe average is",sum/count)
# 输出结果
The average is 20.0
# ==== 嵌套循环 ====
# average2.txt 文件内容如下
10,20,30
fileName = "D:\\average2.txt"
infile = open(fileName,'r')
sum = 0
count = 0
line = infile.readline()
while line != "": #外循环:对每行循环一次
for xStr in line.split(","): #内循环:对一行中每个数字循环一次
sum = sum +eval(xStr)
count = count +1
line = infile.readline()
print("\nThe average is",sum/count)
# 输出结果
The average is 20.0
25 Oct 2017
Python主要包含以下6种数据类型:
·数字类型 ·字符串类型
·元组类型 ·列表类型
·文件类型 ·字典类型
注:由于篇幅问题,Python基础之数据类型被分为3个部分,相关页面请跳转:
Python基础之数据类型(PartA.数字与字符串类型)
Python基础之数据类型(PartB.元组与列表类型)
Python基础之数据类型(PartC.文件与字典类型)
· 文件类型
问题1:常用的文件编码类型有哪些?
回答1:具体见下表
编码类型
编码描述
ASCII码
多用于英文字母及数字(存储汉字容易报错)
Unicode
包含:汉字、英文字母、数字及各国通用语言
UTF-8
可变长度的Unicode(最常用)
GBK编码
面向汉字的编码(最少用)
问题2:Python如何读取文件?
回答2:Python读取文件包括两步:文件打开+文件读取
文件打开代码示例:infile = open(“numbers.dat”,”r”),文件打开模式如下:
打开模式代码
可做操作
若文件不存在
若该文件存在
r
只能读
报错
-
r+
可读可写
报错
全文覆盖
w
只能写
创建
全文覆盖
w+
可读可写
创建
全文覆盖
a
只能写
创建
末尾追加
a+
可读可写
创建
末尾追加
文件读取代码示例:data = infile.read(),文件读取方法如下:
读取模式代码
代码详细描述
read()
返回值为包含整个文件内容的一个字符串
readline()
返回值为文件下一行内容的字符串
readlines()
返回值为整个文件内容的列表,每项是以换行符为结果的一行字符串
Python读取文件示例
# test01.txt 文件内容如下
1 2 3
4 5 6
7 8 9
# 读取文件全部内容
fname = "D:\\test01.txt" #确保D盘下有test.txt文件
infile = open(fname,"r")
data = infile.read()
# 上述两条代码也可合并成:data = open(fname,"r").read() #建议分开写
print(data)
# 输出结果
1 2 3
4 5 6
7 8 9
# 遍历读取文件全部内容
infile = open(fname,"r")
for line in infile:
print(line)
# 输出结果
1 2 3
4 5 6
7 8 9
# 读取文件前n行内容
fname = "D:\\test01.txt"
infile = open(fname,"r")
for i in range(2): #读取文件前几行
data = infile.readline()
print(data)
# 输出结果
1 2 3
4 5 6
# 从第2行开始读取文件内容(多用于去除表头)
fname = "D:\\tes01.txt"
infile = open(fname,"r")
infile.readline() #去除表头
data = infile.readlines() #以列表方式读取
print(data)
# 输出结果
4 5 6
7 8 9
问题3:Python如何写入文件?
回答3:Python文件写入代码示例如下:
outfile = open("D:\\test02.txt","w") #在D盘建一个名为test02的文件,若存在则不会创建
outfile.writelines(["Hello"," ","World"]) #写入数据
outfile.close()
infile = open("D:\\test02.txt","r").read() #读取数据
print(infile)
# 输出结果
Hello World
Python文件写入方法如下:
写入模式代码
代码详细描述
write()
把含有文本数据和二进制数据块的字符串写入文件中
writelines()
针对列表操作,接受一个字符串列表作为参数,并写入文件中
问题4:Python多个文件如何进行合并?
回答4:若熟悉SQL的童鞋应该知道横向全连接这个概念,即以某个变量为参照,将两个文件(数据集)合并成一个文件,这里演示在不借助任何库的情况下,利用Python进行横向连接的方法。
# ==== 原始文件 ====
a1.txt
姓名 电话
王五 123456
张三 456789
李四 789456
熊七 456123
a2.txt
姓名 邮箱
王五 feifei1@qq.com
胜八 feifei2@qq.com
张三 feifei3@qq.com
章九 feifei4@qq.com
# ==== Python代码 ====
# 原始数据读入
ftele1=open('d:\\a1.txt','rb') #采用二进制方式读取,避免中文乱码
ftele2=open('d:\\a2.txt','rb')
ftele1.readline() #去除表头变量名
ftele2.readline()
lines1 = ftele1.readlines()
lines2 = ftele2.readlines()
list1_name = []
list1_tele = []
list2_name = []
list2_email = []
for line in lines1: #获取a1文件中的姓名和电话信息
elements = line.split()
list1_name.append(str(elements[0].decode('gbk'))) #采用gbk中文编码读入
list1_tele.append(str(elements[1].decode('gbk'))) #str()将文本读出来的bytes转换为字符类型
for line in lines2: #获取a2文件中的姓名和邮件信息
elements = line.split()
list2_name.append(str(elements[0].decode('gbk')))
list2_email.append(str(elements[1].decode('gbk')))
# 创建空白文件
lines = []
lines.append('姓名\t 电话 \t 邮箱\n')
#按索引方式遍历姓名列表1
for i in range(len(list1_name)):
s= ''
if list1_name[i] in list2_name:
j = list2_name.index(list1_name[i]) #找到姓名列表1对应列表2中的姓名索引位置
s = '\t'.join([list1_name[i], list1_tele[i], list2_email[j]])
s += '\n'
else:
s = '\t'.join([list1_name[i], list1_tele[i], str(' ----- ')])
s += '\n'
lines.append(s)
#处理姓名列表2中剩余的姓名
for i in range(len(list2_name)):
s= ''
if list2_name[i] not in list1_name:
s = '\t'.join([list2_name[i], str(' ----- '), list2_email[i]])
s += '\n'
lines.append(s)
ftele3 = open('d:\\a3.txt', 'w') #将数据写入文件
ftele3.writelines(lines)
ftele3.close()
ftele1.close()
ftele2.close()
# ==== 输出结果 ====
姓名 电话 邮箱
王五 123456 feifei1@qq.com
张三 456789 feifei3@qq.com
李四 789456 -----
熊七 456123 -----
胜八 ----- feifei2@qq.com
章九 ----- feifei4@qq.com
· 字典类型
问题1:什么是字典类型?
回答1:字典类型是Python中一种非序列的存储结构,存储的是键值对(key:value),其存储形式为 d={key1:value1, key2:value2},以用户名和密码为例:admin={‘admin01’:1234, ‘admin02’:2345, ‘admin03’:3456},其中是唯一不重复的,可以不唯一。
问题2:Python如何操作字典类型数据(基础)?
回答2:操作方式如下
# ==== 构建字典类型数据 ====
students={"203-2012-045":"John","203-2012-037":"Peter"} # 大括号创建字典
# 输出结果
print(students)
{'203-2012-045': 'John', '203-2012-037': 'Peter'}
# ==== 向已有字典里增加数据项 ====
students["202-2011-121"]="Susan" # 中括号添加字典
# 输出结果
print(students)
{'203-2012-045': 'John', '203-2012-037': 'Peter', '202-2011-121': 'Susan'}
# ==== 查询字典中的值 ====
students["203-2012-045"]
# 输出结果
'John'
# ==== 删除字典中的一项 ====
del students["203-2012-037"]
# 输出结果
print(students)
{'203-2012-045': 'John', '202-2011-121': 'Susan'}
# ==== 字典遍历 ====
for key in students:
print(key) # 输出key值
print(students[key]) # 输出value值
print(key + ":" + str(students[key])) # 输出key-value值
# 输出结果
203-2012-045
John
203-2012-045:John
==============
202-2011-121
Susan
202-2011-121:Susan
# ==== 判断键key是否在字典中 ====
"203-2012-045" in students # Output显示True/False
# 输出结果
True
问题3:Python如何高效操作字典类型数据(进阶)?
回答3:这里要使用到Python所提供的函数,具体方式如下:
# ==== 构建字典类型数据 ====
students={"203-2012-045":"John","203-2012-037":"Peter"}
# ==== 显示字典中所有的key ====
tuple(students.keys())
# 输出结果
('203-2012-045', '203-2012-037')
# ==== 显示字典中所有的value ====
tuple(students.values())
# 输出结果
('John', 'Peter')
# ==== 显示字典中所有的key-value ====
tuple(students.items())
# 输出结果
(('203-2012-045', 'John'), ('203-2012-037', 'Peter'))
# ==== 获取字典中key对应的值 ====
students.get("203-2012-045")
# 输出结果
'John'
# ==== 删除字典中key对应的值 ====
students.pop("203-2012-045")
students
# 输出结果
'John'
{'203-2012-037': 'Peter'} #students中删除了'John'
# ==== 删除字典中所有的值 ====
students.clear()
students
# 输出结果
{} #students被清空
25 Oct 2017
Python主要包含以下6种数据类型:
·数字类型 ·字符串类型
·元组类型 ·列表类型
·文件类型 ·字典类型
注:由于篇幅问题,Python基础之数据类型被分为3个部分,相关页面请跳转:
Python基础之数据类型(PartA.数字与字符串类型)
Python基础之数据类型(PartB.元组与列表类型)
Python基础之数据类型(PartC.文件与字典类型)
· 元组类型VS列表类型
问题1 :元组类型和列表类型分别是什么样?
回答1a:元组中元素之间用逗号分隔,可加()也可以不加,具体请见下文,Python元组类型的操作。例:t1=(123,456,”hello”)
回答1b:列表中元素之间同样用逗号分隔,必须加[ ]。例:t2=[123,456,”hello”]
问题2 :元组类型和列表类型之间的相同点和不同点?
回答2a:相同点:元组和列表中的元素类型可以不一样;可以采用索引形式获取元组和列表中的元素。
回答2b:不同点:定义好的元组不可修改,但列表可随时修改且没有大小限制。
· Python元组类型的操作
t1 = 123,456,"hello"
t2 = (123,456,"hello")
t3 = 123,(456,"hello")
print(t1[1])
print(t2[1])
print(t3[1]) #(456,"hello")为一个元素
#输出结果
456
456
(456, 'hello')
· Python列表类型的操作
# ==== 列表运算操作 ====
m1 = [123,456,"hello"]
m1*2
len(m1[0:]) #计算列表中元素个数
for i in m1[0:]: #遍历列表中所有元素
print(i)
123 in m1 #判断列表中是否包含某个元素
#注:上述程序分条运行
#输出结果
[123, 456, 'hello', 123, 456, 'hello']
3 #len()函数
123 #循环语句
456
hello
True #条件判断
# ==== 列表修改操作 ====
#添加元素
m1.append("中国") #将元素X增加到列表的最后
m1.insert(2,"中国") #将元素X插入到2号位
#元素排序
m1.reverse() #将列表元素反转
m1.sort() #将列表元素排序,注:混合列表无法排序
#删除元素
m1.remove(123) #删除列表中第一次出现的元素X
m1.pop(2) #删除列表中2号位的元素
#注:上述程序分条运行,测试代码如下
m1 = [123,456,"hello"]
m1.append("中国") #分别替换“列表修改操作”代码条
print(m1)
#输出结果
[123, 456, 'hello', '中国']
[123, 456, '中国', 'hello']
['hello', 456, 123] #元素反转
[456, 'hello']
[123, 456]
25 Oct 2017
问题: 10,011,101这样一个数据该如何解释?
回答: 可以是1个二进制数字,1个十进制数字,一段文本,或者是逗号分割的3个数字···
但诸如Python、Java等程序设计语言中,不允许存在语法歧义,因此在输入数据时需要明确说明数据的含义,即标记数据类型。
Python主要包含以下6种数据类型:
·数字类型 ·字符串类型
·元组类型 ·列表类型
·文件类型 ·字典类型
注:由于篇幅问题,Python基础之数据类型被分为3个部分,相关页面请跳转:
Python基础之数据类型(PartA.数字与字符串类型)
Python基础之数据类型(PartB.元组与列表类型)
Python基础之数据类型(PartC.文件与字典类型)
· 数字类型
Python包含3种数字类型
·整数类型 int()
·浮点数类型 float()
·复数类型 complex()
问题1:整数、浮点数、复数之间是怎样的关系?
回答1:复数==去除虚数部分==>浮点数==去除小数部分==>整数,因此整数是浮点数特例,浮点数是复数特例。
问题2:不同数据类型之间混合运算的结果?
回答2:运算后结果为最宽的数字类型,例:整数+浮点数=浮点数
问题3:数字类型之间能否相互转化?
回答3:整数与浮点数之间能够相互转化,但复数只能单向转化,例如:
#正确示例
int(4.5) #输出结果:4
float(4) #输出结果:4.0
complex(4) #输出结果:4+0j
#错误示例
float(4+0j) #输出结果:错误!
问题4:如何判断数字类型?
回答4:利用type()函数,例:type(4.5) 输出结果:float
· 字符串类型
Python字符串是用”双引号”或者’单引号’括起来的字符组,例如:
str1 = "Hello"
str2 = 'World'
print(str1+" "+str2)
#输出结果
Hello World
Python语言转义符: \
print("\"Hello World\"")
#输出结果
"Hello World"
print("Hello\nWorld") #\n表示换行
#输出结果
Hello
World
Python截取字符串
print("Hello World"[0:3]) #"string"[start:end]
#字符截取从start开始直到end结束,但不包括end位置,即[0:3]输出编号为0,1,2
#输出结果
Hel
Python返回字符串长度len()函数
len("Hello world")
#输出结果
11
Python字符串类型转化str()函数
str(123.456) #输出结果:'123.456'
type(str(123.456)) #输出结果:str
Python字符串使用实例
# month.py
weeks = "MonTueWenThuFriSatSun"
n = input("请输入星期数(1-7):")
pos = (int(n)-1) * 3
#星期一 pos=0,星期二 pos=3,星期三 pos=6以此类推
weekAbbrev = weeks[pos:pos+3]
print("星期几简写是:" + weekAbbrev)
24 Oct 2017
· 格式化输出
1.整数输出
#'%d'代替十进制数字(常用)
print("I am %d years old"%10)
#与上句结果相同
age=10
print("I am %d years old"%age)
#输出整数三种表现形式
print("十进制%d,八进制%o,十六进制%x"%(age,age,age))
#输出结果
I am 10 years old
dec=10, oct=12, hex=a
注:整数有三种表现形式:十进制%d, 八进制%o, 十六进制%x
2.浮点数输出
#'%f'默认保留小数点后6位
#'%e'指数形式输出
#'%g'根据实际情况输出,最多保留小数点后6位
num=3.1415
print('%f , %e , %g'%(num,num,num))
#输出结果
3.141500 , 3.141500e+00 , 3.1415
3.字符串输出
#'%s'代替字符串
print('I love study %s'%'python')
#截取部分字符串
print('I love study %.2s'%'python')
#输出结果
I love study python
I love study py
· format()函数输出
1.通过位置替换
print("{} {}".format("hello","world")) #必须一一对应
print("{0} {0} {1}".format("hello","world"))
#输出结果
hello world
hello hello world
2.关键词替换
print("I love {you}".format(you="python"))
#输出结果
I love python
· print输出到txt文件
sentence = "I love python"
print((sentence),file=open("D:\\test01.txt","a+"))
13 Sep 2017
鉴于许多童鞋对课堂上利用python构建的随机点名器比较感兴趣,遂写下该博文。
随机点名器属于python比较基础的运用,构建点名器前需要具备以下条件:
Python版本3.5及以上;
已安装random包(Anconda自带)
已安装tkinter包(需自行安装)
· 构建简易的点名器
import random
random.choice(['张三','李四','王五'])
输出结果:'李四'
· 具有弹出框的点名器
from tkinter import *
import random
root = Tk() #注意大小写
root.title("CDA 点名器")
root.geometry()
def printhello():
name = random.choice(['张三','李四','王五']) #学员姓名
t.insert('1.0', "Who is the Lucky Guy:"+ name + "\n")
t = Text()
t.pack()
Button(root, text="点击", command = printhello).pack()
root.mainloop()
结果窗口:
01 Apr 2017
1.运行 -> cmd -> 输入jupyter notebook –-generate-config
2.打开C盘 -> 用户 -> admin -> 看到.jupyter
3.进入.jupyter -> 右键jupyter_notebook_config -> Edit with Idle
4.找到c.NotebookApp.notebook_dir= 修改路径(注意去除#),后保存
注意:路径中jupyter为用户新建文件夹(可选择自己的路径)
5.重新打开jupyter notebook(路径修改成功)