[toc]
python2.7 中的调试模块
https://blog.csdn.net/weixin_33843409/article/details/92691700
python 中的zip函数
import os,pdb
ass=zip(["good","better","best","supper"],[[],[],None,None])
myDict=dict(ass)
print(ass)
print(myDict)
用 python2.7 的执行结果:
----------------
$ python2.7 ass.py
[('good', []), ('better', []), ('best', None), ('supper', None)]
------------------
{'better': [], 'good': [], 'best': None, 'supper': None}
用 python3.8 的执行结果:
$ python ass.py
<zip object at 0xe838be28>
-------------------
{'good': [], 'better': [], 'best': None, 'supper': None}
$
python模块中 all
的作用
test.py文件开头写上: __all__ =[func1,func2]
当其它文件导入 from test import *
只会导出"[func1, func2]"里面的内容,其它调用不行
python中为什么要继承 object 类
https://www.zhihu.com/question/19754936
python2.7中,将输入内容转化为unicode
https://www.cnblogs.com/jinjiangongzuoshi/p/4375071.html
import os, sys
val=raw_input("input your name:").decode(sys.stdin.encoding)
decode作用是把其它编码的字符串转换成unicode编码:name.decode(“GB2312”)
encode则是将unicode编码的字符串转换成其它编码:name.encode(“GB232”)表示将
又一个惊掉下巴的用法
import os,sys
[print("i=%d"%(i)) for i in range(0,1)]
此语句在 python3.7 环境运行,成功输出0~9
但在python2.7环境运行,却提示语法错误。但是在python2.7的项目中,却出现了此语法而没有报错,晕…
python中创建元组tuple
https://www.cnblogs.com/SCCQ/p/1266543.html
创建元组的方法,与创建列表很类似,只是将创建列表时的【】改为()即可:
创建元组:t=('aa','bb','cc')
创建数组:s=['aa','bb','cc']
两者区别在于,元组创建之后,即不能再更改,也不能插入。而数组可以随便操作
python中参数带星号的作用
https://blog.csdn.net/claire03/article/details/78950998?utm_source=blogxgwz5
1、对于函数定义:表示允许接收过量参数
2、对于调用,表示将参数打包成一个参数传入,然后在函数内部解开
python异常处理
import os,pdb
arr=[1,2,3,4,5]
for i in range(3,10):
try:
print(arr[i])
except:
print(%d failed"%(i))
python同时给多个变量赋值
直接赋值
a,b=0,1
assert a==0
assert b==1
从数组(列表)赋值
(r,g,b)==["red","green","blue"]
assert r=="red"
assert g=="green"
assert b=="blue"
从元组赋值
(x,y)=(1,2)
assert x==1
assert y==2
python字典遍历
https://www.cnblogs.com/FlyingLiao/p/11192330.html
python中的property关键字
简而言之,就是把函数当成成员变量一样的 get.
具体解释,还是廖雪峰说的明白
https://www.liaoxuefeng.com/wiki/897692888725344/923030524000032
python中星号参数的作用
一句话简述:
一个星号就是压缩参数与解压参数
定义的地方,def func(a,b,*args)表示支持参数扩展,把收到的一个参数扩展成N个。
相应的,在调用的地方,则表示将多个数据打包成一个参数传入
https://blog.csdn.net/mm2zzyzzp/article/details/83057152
python2.7开发环境迁移
1、故事背景
因为工作需要,原来的windows环境需要切换为linux。
本机所有文件都被限期迁移到linux上。
整个团队只有一台win-server2008。
原来本地部署的python开发环境,经过长期积累,已经安装了许
多第三方库。即将面临废弃的风险。
迫切需要将现在开发环境原封不动的移到新服务器上
2、迁移方法,以及其中遇到的问题
方法:
最简单的将 C:\python27 目录直接复制过去
遇到问题一:
一开始运行简单程序还好,没问题。但是执行到某些第三方库时,会提示找不到对应的dll。
解决办法:
将 python2.7.msi 安装文件,重新执行一次安装操作,选择修复。修复结束后,不再提示错误。
遇到问题二:
操作excel时报错,花费了半天时间。一开始以为是 win32com模块在迁移后出了问题。
后来认真查看错误,百度查找。原来只是因为服务器上没有安装office/excel 或者 wps/excel。
解决办法:
安装wps/excel之后,即可正常执行,能生成excel和数据库
python 大数据扫描内存不足问题解决
1、来源
【解决Python memory error的问题(四种解决方案)_小白白的博客-CSDN博客】https://blog.csdn.net/weixin_39750084/article/details/81501395
2、引出问题
本文原作者:
昨天在用用Pycharm读取一个200+M的CSV的过程中,竟然出现了Memory Error!
简直让我怀疑自己买了个假电脑,毕竟是8G内存i7处理器,一度怀疑自己装了假的内存条。
下面说一下几个解题步骤。。。。一般就是用下面这些方法了,按顺序试试.
本人的原由:因为扫描100G左右的 TXT 文件,逐个进行内容
分析,
内存显然还没有用尽,程序就报 memory error!找了很久,
好不容易找到这篇文档,尝试后成功解决问题。
一、逐行读取
如果你用pd.read_csv来读文件,会一次性把数据都读到内存里来,导致内存爆掉,那么一个想法就是一行一行地读它,代码如下:
data = []
with open(path, 'r',encoding='gbk',errors='ignore') as f:
for line in f:
data.append(line.split(','))
data = pd.DataFrame(data[0:100])
这就是先用with open把csv的每一行读成一个字符串,然后因为csv都是靠逗号分隔符来分割每列的数据的,那么通过逗号分割就可以把这些列都分离开了,然后把每一行的list都放到一个list中,形成二维数组,再转换成DataFrame。
这个方法有一些问题,首先读进来之后索引和列名都需要重新调整,其次很多数字的类型都发生了变化,变成了字符串,最后是最后一列会把换行符包含进去,需要用replace替换掉。
不知道为什么,用了这个操作之后,还是出现了Memory error的问题。基于这些缺点以及遗留问题,考虑第二种解决方案。
二、巧用pandas中read_csv的块读取功能
pandas设计时应该是早就考虑到了这些可能存在的问题,所以在read功能中设计了块读取的功能,也就是不会一次性把所有的数据都放到内存中来,而是分块读到内存中,最后再将块合并到一起,形成一个完整的DataFrame。
f = open(path)
data = pd.read_csv(path, sep=',',engine = 'python',iterator=True)
loop = True
chunkSize = 1000
chunks = []
index=0
while loop:
try:
print(index)
chunk = data.get_chunk(chunkSize)
chunks.append(chunk)
index+=1
except StopIteration:
loop = False
print("Iteration is stopped.")
print('开始合并')
data = pd.concat(chunks, ignore_index= True)
以上代码规定用迭代器分块读取,并规定了每一块的大小,即chunkSize,这是指定每个块包含的行数。
这个方法能够保持数据的类型,也不需要自己费心思去调整列名和index,比较方便。但不幸的是,我的还是出现了这个问题,如果你的用了这种方法还是出现memory error,你可以继续往下看。
三、扩充虚拟内存
我在运行代码的过程中发现,出现memory error错误的时候,其实我的内存只用到了40+%,
所以其实不太可能会出现这个错误啊,所以我查了下,发现有说是内存被限制了,
考虑关掉一些可能限制内存的软件啦,扩大虚拟内存啦,这些的。
扩大虚拟内存的方法(我的系统是win8,不过应该都大同小异):
1、打开 控制面板;
2、找到 系统 这一项;
3、找到 高级系统设置 这一项;
4、点击 性能 模块的 设置 按钮;
5、选择 高级面板,在 虚拟内存 模块点击更改;
6、记得 不要 选中“自动管理所有驱动器的分页文件大小”,然后选择一个驱动器,也就是一个盘,选中自定义大小,手动输入初始大小和最大值,当然,最好不要太大,更改之后能在查看盘的使用情况,不要丢掉太多空间。
7、都设置好之后,记得点击 “设置”, 然后再确定,否则无效,最后 重启电脑 就可以了。
悲剧的是我在设置完这一步之后还是出现了内存错误,到这一步就没有问题了的朋友就可以不用看下面一种解法了,如果还是有问题,可以接下来看。
四、更新Pandas和Numpy库为64位
如果你的Python用的是32位的,那么你的pandas和Numpy也只能是32位的,那么当你的内存使用超过2G时,就会自动终止内存。发现这个错误也是因为我察觉到报内存溢出的错误的时候,我的内存明明显示只用了40+%,然后错误提示是在pandas的core中,所以查了一下,发现原来还有这么个大坑。
解决方法就是:先检查一下你的python是多少位的,在shell中输入python,查看位数,如果是32位,那么就重装Python,装一个64位的,但同时你的库也需要重新装了。不过我执行完这一步之后,问题就完美解决了!
五、如果还有内存溢出的错
以上四种方法,按顺序逐一使用,到哪一步错误消失了就可以停止啦。
当然了,如果你的内存显示使用达到了99%+,那么就是内存真的不够用,
不是别的问题,如果不是数据量特别大,那就是写代码的时候的习惯问题,
虽然Python有垃圾回收机制,但是有时候可能来不及回收,尤其是在循环迭代这些过程中,
往往会循环完毕了才来得及收拾垃圾,所以记得及时把不要的变量del掉,
或者用gc这个垃圾回收库,这样内存自然就一直清清爽爽啦~
字典中先判断变量是否定义,没有的话则定义
1、引出问题
因为自己负责的python代码崩溃,通过添加打印,终于找到死因:
访问了没有定义的字典元素。
将故障演示如下
2、故障演示
a={"a1":(39,40,41,42),
"a2":(49,50,51),
};
print(a); print(a["a1"]); print(a["a2"])
if 50 in a["a1"]:
print "good-1"
if 50 in a["a2"]:
print "good-2"
# 这里就是故障发生的地方,我用try规避了一下
try:
print a["a3"]
except:
a["a3"]={}
# 换一种更加科学的写法
if "a3" in a.keys():
print ("a3 in in a dictionary!")
1; #如果数据量太大,打印会严重影响速度,直接放个1什么事情都不做
else:
a["a3"]={}
pip 安装自己的库文件
1、用法
pip install pywin32 --trusted-host mirrors.my.com.cn -i http://mirrors.my.com.cn/pypi/simple
pip install pywin32 --trusted-host 192.168.1.9 -i http://192.168.1.9/pypi/simple
2、怎样制作自己的服务器
来源
https://www.cnblogs.com/special-li/p/9149573.html
具体操作
应用场景: Windows10
安装 : pip install pypiserver
使用 :服务器端
创建包仓库,eg D:/packages
把下载好的python包放到创建好的仓库里
启动pypi-server服务器,并指定仓库目录
## Will listen to all IPs.
pypi-server -p 8080 D:/packages
客户端
配置pip.ini文件
[global]
index-url=http://<server_ip>:8080/simple
trusted-host=<server_ip>
no-warn-script-location=False
从服务器下载packages
pip install <package>
搜索包
pip search --index http://<server_ip>:8080
值得注意的是: 想要search正常工作,url后面不能以 simple 结尾
获取帮助信息
pypi-server --help
满足条件时进入断点
import pdb
if (isValidCondition(3)):
print("something error happens")
pdb.set_trace
ModuleNotFoundError: No module named ‘setuptools’
执行python安装命令时报错"ModuleNotFoundError: No module named 'setuptools'"如何处理?
答: 安装python-setuptools/python3-setuptools
$ sudo apt-get install python-setuptools python3-setuptools
《“python”》 有 16 条评论
您的文档写的真好,badword 式工
再做一个评论,zhengzhi原因的字符看看效果
您好,我想用您的文档,用于非法勾当,行不行?
不行,必须自己实现
评论出人才?
难道必须要回复楼主才能有邮件通知?
当wpjam插件被关闭之后,通过EASY WP SMTP插件是否还能继续发邮件呢?
不行,离开wpjam,配置的一段php代码无法生效
那么将wpjam恢复,看看能不能重新发送邮件
为什么还是不行呢?
您是楼主,问谁啊
请问一个关于进程的问题
发表个评论,楼主能收到几封邮件?
其实我也不知道,一或者两封!
到底是几呢?
这是备份网站的第一alsobad评论!^_^