python

[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 条评论

回复 apple 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注