热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3入门及实践难点语句解读备注

Python入门学习资料第一部分《如何系统地自学Python?》《初学python者自学anaconda的正确姿势是什么?》《jupyternotebook可以做哪些事情?》第二部

Python入门学习资料

第一部分

《如何系统地自学 Python?》

《初学python者自学anaconda的正确姿势是什么?》

《jupyter notebook 可以做哪些事情?》

第二部分

知乎live《零基础掌握人工智能核心:Python》

我一开始还没有听这个课程,是先学了菜鸟教程,学了很长时间,觉得脑袋很乱,知识点很多。但是后面听了猴子老师的课程之后,马上得到了python的整个知识架构框架,然后在框架里面学知识点,感觉这样子学起来更清晰,更轻松。而且不会像背英文字典那样,钻牛角尖到一些偏门的知识点里面去浪费时间。跟一个好的老师和好的教程,收获了更好的学习方法。关键是以后用这种方法学其他东西都会更快上手。程序员的最重点技能是快速上手新技能,哈哈

第三部分

菜鸟教程Python3第一章到输入和输出章,或者书《父与子的编程之旅》,或者书《利用Python进行数据分析》(菜鸟教程比较简洁,在电脑练习运行也比较方便。《父与子的编程之旅》非常适合用来复习,虽然页码多,但是举例非常周全,适合系统的复习代码命令)

《5个适合Python数据分析初学者的项目》这项比较难理解,建议放到最后。

第四部分

实践作业:在notebook中完成课程中练习章节的内容,【医院病人数据分析】

安装

下载和安装的等待很花时间,最好找工作间隙来下载安装,每次等大约需要5分钟。

1. Python–语言程序;

2. Anaconda–包和环境管理器;

3. Jupyter notebook–编辑器;

以上是数据分析最主流的安装环境。至于有的教程说PyCharm,它是针对做开发的,不必要装。

收藏这个网站stackoverflow全球最大的技术问答网站https://stackoverflow.com/

Anaconda 安装和练习

更新包 conda upgrade –all差不多要2个小时

Notebook 自动关联环境: conda install
nb_conda

创建环境:conda create -n py3 python=3

进入环境: activate py3

离开环境:deactivate

列出环境:conda env list

删除环境:conda env remove -n env_name

安装Jupyter notebook:conda install
Jupyter notebook

修改notebook工作文件夹,方便存储工作文件

安装notepad++

Jupyter notebook –generate-config,得出文件jupyter_notebook_config.py的路径

用notepad++修改文件,搜索c.NotebookApp.notebook_dir,去掉“#”,修改为c.NotebookApp.notebook_dir=’D:\\nbspace’,保存

重启notebook: jupyter notebook,看到新的local directory

浏览器打开:http://localhost:8888

Anaconda 共享环境

在Anaconda终端运行代码自动补全命令:conda install pyreadline

输入第一个变量的第一个字母p,然后按下Tab键,边会自动查找到代码中以p开头的变量名称。

如果你定义的变量想出现在代码补全里,需要你先把定义该变量的cell运行以后,notebook才能识别它。

运行快捷键ctrl+enter

其实Notebook 就是个扩展名为 .ipynb 的大型 JSON 文件。

4)如何共享你的notebook?

点击File->Download as,你可以选择多种格式下载你的notebook。一般我都会根据下面的用途来选择不同的下载格式:

1)如果我想和客户分享我的数据分析成果,我会选择将notebook下载为HTML文件。

2)如果我希望将自己的数据分析成果和代码嵌入到项目中,比如为药店管理系统做个数据分析子模块,我就会选择Python(.py)模块,这可以将我的代码融入项目中,成为子模块,方便和其他开发人员共同完成任务。

3)如果要在博客或文档中使用
notebook,我就选择Markdown格式。

关闭notebook服务器后,下次启动再打开notebook,当你继续在该notebook中写代码时,发现之前的变量无法访问了。需要你在该notebook的Kernerl选项卡中选择“Run All”重新编译下之前的代码。

Python3菜鸟教程的实践难点语句解读备注

Python3输入和输出

pickle 模块 基本的数据序列化和反序列化。

import pickle

import
pprint,pickle

data1 =
{‘a’:[1,2.0,3.1,4+6j,’pprint方法输出将对象的输出分隔成单行显示,并在宽度设置不适合时,将其分成多行显示。’],#小试一下,pprint的分行输出

‘b’:(‘string’,u’Unicode string’),

‘c’:None}

selfref_list =
[1,2,3]

selfref_list.append(selfref_list)#自己拼接自己

output_file =
open(‘data.txt’,’wb’)# 小试一下,.pkl或.txt文件新建或打开,不能是其他路径,需要是默认路径

pickle.dump(data1,output_file)#写入

pickle.dump(selfref_list,output_file,-1)

output_file.close()

#读取

pkl_file =
open(‘data.txt’,’rb’)

data1 =
pickle.load(pkl_file)#自动识别类型?

pprint.pprint(data1)#不能像print那样输出字符串

print(‘\nprint\n’,data1)
小试一下,对比pprint与print

data2=
pickle.load(pkl_file)

pprint.pprint(data2)

print(‘\nprint\n’,data2)
小试一下,对比pprint与print,print无法输出append的内容

”’

pprint module提供了可以按照某个格式正确的显示python已知类型数据的一种方法,这种格式可被解析器解析, 又很易读。

但是,如果已知格式的数据对象不是python的基础类型,这种表示方法就有可能加载失败。

这种情况一般是对象为 files,
sockets, classes, or instances are included, as well as many other built-in objects
which are not representable as Python constants。

该方法输出将对象的输出分隔成单行显示,并在宽度设置不适合时,将其分成多行显示。

”’

pkl_file.close()

运行结果

《Python 3 入门及实践难点语句解读备注》
《Python 3 入门及实践难点语句解读备注》

#通过 pickle 序列化实现一个简单联系人信息管理。

import pickle

import os

datafile =
‘person.data’

line =
‘=======================================’

message = ”’

=======================================

Welcome bookmark:

press 1 to show list

press 2 to add pepole

press 3 to edit pepole

press 4 to delete pepole

press 5 to search pepole

press 6 to show menu

press 0 to quit

=======================================

”’#多行字符串

print(message)

class
Person(object):

#通讯录联系人类

#__init__() 的特殊方法(构造方法)

def __init__(self,name,number):

self.name = name

self.number = number

#读取数据

def
get_data(filename = datafile):#预设值的默认参数

#文件存在且不为空

if os.path.exists(filename) and
os.path.getsize(filename):

with open(filename,’rb’) as f:

return pickle.load(f)#全部读取

return None

#变更数据,写入数据

def
set_data(name, number, filename = datafile):

persOnList= {} if get_data() == None else get_data()#还是不是很明白,大神指导下

”’

列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边#第一条语句是最后一层。

[x*y for x in
range[1,5] if x > 2 for y in range[1,4] if x <3]

他的执行顺序是

for x in
range[1,5]

if x > 2

for y in range[1,4]

if x <3

x*y

&#8221;&#8217;

with open(filename, &#8216;wb&#8217;) as f:

personList[name] = Person(name,number)#数据格式{name1:person1,name2:person2,&#8230;}更新list,若字典里面的键name存在,则替换person。若name不存在,则添加name:person

print(personList)#小试一下,查看personList的格式

pickle.dump(personList,f)#全部写入到文件

#保存字典格式的数据到文件

def
save_data(dictPerson, filename = datafile):

with open(filename, &#8216;wb&#8217;) as f:

pickle.dump(dictPerson,f)#全部写入到文件

#显示所有联系人

def show_all():

persOnList= get_data()

if personList:

for v in personList.values():#遍历personList字典的值

print(v.name,v.number)#输出值person类中的元素

print(line)

else:

print(&#8216;not yet person, please add
person&#8217;)

print(line)

#添加联系人

def
add_person(name,number):

set_data(name,number)

print(&#8216;success add person&#8217;)

print(line)

#编辑联系人

def
edit_person(name,number):

persOnList= get_data()

if personList:

personList[name] = Person(name,number)

save_data(personList)

print(&#8216;success edit person&#8217;)

print(line)

#删除联系人

def
delete_person(name):

persOnList= get_data()

if personList:

if name in personList:

del personList[name]

save_data(personList)

print(&#8216;success delete person&#8217;)

else:

print(name,&#8217;is not exists in dict&#8217;)

print(line)

#搜索联系人

def
search_person(name):

persOnList= get_data()

if personList:

if name in personList.keys():

print(personList.get(name).name,personList.get(name).number)

print(personList[name].name,personList[name].number)#小试一下,这条与上面一条效果一致

else:

print(&#8216;No this person of &#8216;,name)

print(line)

while True:

num = input(&#8216;>>&#8217;)

if num == &#8216;1&#8217;:

print(&#8216;show all personList:&#8217;)

show_all()

elif num == &#8216;2&#8217;:

print(&#8216;add person:&#8217;)

name = input(&#8216;input name>>&#8217;)

number = input(&#8216;input number>>&#8217;)

add_person(name,number)

elif num == &#8216;3&#8217;:

print(&#8216;edit person:&#8217;)

name = input(&#8216;input name>>&#8217;)

number = input(&#8216;input number>>&#8217;)

edit_person(name,number)

elif num == &#8216;4&#8217;:

print(&#8216;delete person:&#8217;)

name = input(&#8216;input name>>&#8217;)

delete_person(name)

elif num == &#8216;5&#8217;:

print(&#8216;search :&#8217;)

name = input(&#8216;input name>>&#8217;)

search_person(name)

elif num == &#8216;6&#8217;:

print(message)

elif num == &#8216;0&#8217;:

break#退出循环,即不再提示第一句的输入num =
input(&#8216;>>&#8217;)

else:

print(&#8216;input error, please retry&#8217;)

小试一下的运行结果

《Python 3 入门及实践难点语句解读备注》
《Python 3 入门及实践难点语句解读备注》

Python3 File(文件) 方法

查找文件夹中的文件,找出相应后缀文件

import os

import os.path

ls = []

def getAppointFile(path,ls):

fileList = os.listdir(path)#返回path指定的文件夹包含的文件或文件夹的名字的列表。

try:

for tmp in fileList:

pathTmp = os.path.join(path,tmp)#连接路径和文件或文件夹名称,获得下一级文件或文件夹路径

if True==os.path.isdir(pathTmp):#如果路径是文件夹

getAppointFile(pathTmp,ls)#再次执行获取下一级文件和文件夹路径

elif
pathTmp[pathTmp.rfind(&#8216;.&#8217;)+1:].upper()==&#8217;PY&#8217;:#如果不是文件夹,如果查找文件路径字符串.+1位到末尾是PY

ls.append(pathTmp)#则将文件路径加入到ls列表末端

except PermissionError:

pass

def main():

while True:

path = input(&#8216;请输入路径:&#8217;).strip()#path=&#8217;E:/nbspace&#8217;删除前后的空格

if os.path.isdir(path) == False:#如果路径不是文件夹&#8211;是文件,则断开执行。

break

getAppointFile(path,ls)

print(ls)

print(len(ls))

break

main()

运行结果,黑框是直接双击打开保存的py文件。

《Python 3 入门及实践难点语句解读备注》
《Python 3 入门及实践难点语句解读备注》

没有break跳出循环时的运行会ls不断累加。

《Python 3 入门及实践难点语句解读备注》
《Python 3 入门及实践难点语句解读备注》

替换文档中的文字

def
file_replace(file_name,rep_word,new_word):

f_read = open(file_name)

cOntent= []

count = 0

for eachline in f_read:#eachline 在这里可以是任意名称变量

if rep_word in eachline:

count = count +
eachline.count(rep_word)# count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。

eachline =
eachline.replace(rep_word,new_word)#替换

content.append(eachline)#连接,赋值给新的变量

decide = input(&#8216;\n文件%s中共有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:&#8217;\

%(file_name,count,rep_word,rep_word,new_word))#因为用了中文的小括号导致报错 invalid character

if decide in [&#8216;YES&#8217;,&#8217;Yes&#8217;,&#8217;yes&#8217;]:

f_write = open(file_name,&#8217;w&#8217;)#open的file_name可以有路径

f_write.writelines(content)#所有行写入到文件

f_write.close()

f_read.seek(0,0)

print(f_read.readlines())#分行读出,每一行当做列表中的字符串元素,换行读成\n

f_read.seek(0,0)

for eachline in f_read:

print (eachline,end=&#8221;)#分行读出,原文展示

f_read.close()

file_name =
input(&#8216;请输入文件名:&#8217;)#&#8221;C:\nbspace\鸡腿.txt&#8221;可以有路径

rep_word =
input(&#8216;请输入需要替换的单词或字符:&#8217;)

new_word =
input(&#8216;请输入新的单词或字符:&#8217;)

file_replace(file_name,rep_word,new_word)

运行结果

《Python 3 入门及实践难点语句解读备注》
《Python 3 入门及实践难点语句解读备注》

病历数据excel读取

import pandas as pd

fileNameStr = &#8216;C:\Users\Administrator\病历数据.xlsx&#8217;

#shift+右键点击文件-复制为路径可以轻松复制文档的路径,注意去掉路径两端的双引号

print(&#8216;ok1&#8217;)

#导入excel文件

xl = pd.ExcelFile(fileNameStr)

print(&#8216;ok2&#8217;)

#读取工作表

patientDf = xl.parse(&#8216;Sheet1&#8217;)

print(&#8216;ok3&#8217;)

print(patientDf)

#路径用C:\Users\Administrator\病历数据.xlsx时报错,

《Python 3 入门及实践难点语句解读备注》
《Python 3 入门及实践难点语句解读备注》

搜索了问题,说是“字符串中的第一个反斜杠被解释为一个特殊字符,事实上,后面跟着一个“U”它被解释为一个unicode代码点的开始。”

改成C:\\或者C:/后就可以了。

#出现错误又没有提示时,我喜欢用print语句来查看运行到哪一句


推荐阅读
author-avatar
手机用户2502913137
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有