迄今为止在python上遇到的坑,超长预警
with open
的使用
等效于with open('/path/to/file', 'r') as f: print(f.read())
try: f = open('/path/to/file', 'r') print(f.read()) finally: if f: f.close()
os.listdir(path)
返回path路径下的所有文件和文件夹列表os.path.join(path1,str)
将两个字符串合并生成一个新路径列表解析功能
比如b =[i+2 for i in a]
apk_dirs = [os.path.join(BASE_PATH, name) for name in names]
list
用于将元组转换为列表
元祖不可更改,列表可以更改。列表对应一大批操作函数。通过这种方式可以遍历打开Path路径下的所有文件
注意冒号for file in os.listdir(Path): with open(os.path.join(Path, file), 'r') as f '''熟悉用python操作文件路径 熟悉使用2 3 for in等'''
Python JSON
http://www.runoob.com/python/python-json.htmljson.dumps
将 Python 对象编码成 JSON 字符串json.loads
将已编码的 JSON 字符串解码为 Python 对象字典
{
元组(
列表[
- 经常用
a.append(1)
来代表一位记录特征 shutil.copy(source, destination)
将source路径的文件复制为destination路径的文件(相当于cp)matplotlib.pyplot
用于画画的库dict.value()
方法
返回所有的字典值组成的列表index()
函数用于从列表中找出某个值第一个匹配项的索引位置。- jupyter可以方便选择哪几个指定模块来执行 而不用执行整个文件
python目录与文件操作(部分)
os.path.exists(path)
判断一个目录是否存在os.makedirs(path)
多层创建目录os.mkdir(path)
创建目录shutil.copy(fileA, fileB)
将路径文件A复制到路径文件B。注意如果fileB路径的中间路径并不存在,需要建立中间的目录!(手动or用os.makedirs)
混淆矩阵
sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
y_true: 是样本真实分类结果,y_pred: 是样本预测分类结果
labels:是所给出的类别,通过这个可对类别进行选择
sample_weight:样本权重
后两者可以没有
详细用法见 https://blog.csdn.net/m0_38061927/article/details/77198990读取文件的编码问题,字符串编码问题 超级大坑
超级大坑!!!!!
https://stackoverflow.com/questions/956867/how-to-get-string-objects-instead-of-unicode-from-jsonpython格式化输出
print ("Name:%10s Age:%8d Height:%8.2f"%("Aviad",25,1.83))
```python
in not in
正确写法
key = “aaa”
lt = [“aaa”,”bbb”,”vvv”]
if key in lt:print("list is true")
else:
print("list is false")
list is true
错误写法1:key写成一个列表。 in语法是要一个元素in一个列表
key = [“aaa”]
lt = [“aaa”,”bbb”,”vvv”]
if key in lt:print("list is true")
else:
print("list is false")
list is false
错误写法2:if a in b is True。 不能用is True。原因不明(?)
key = “aaa”
lt = [“aaa”,”bbb”,”vvv”]
if key in lt is True:print("list is true")
else:
print("list is false")
list is false
21. 有时候python无法判断该数据为数值or字符串。 所以在输出的时候,有些无法分清的情况需要`print(str(key))` 22. python的函数参数传递(实参和形参) 在函数体内修改参数内容会影响到函数外的对象吗? (1)如果数字、字符串或元组,本身就是不可变的,自然也不会影响到函数体外的对象 (2)如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。 备注:这里的修改参数是修改参数对象内部的值,不是赋值哦。即var[1]='hello'和var=['hello','world']区别。即使是列表,在函数体内对参数重新赋值了,不会影响到函数体外的对象哦。注意和c++的比较。 相当于python函数参数传递是一个指针 23. 字典添加新pair ```python dict ={} dict['aaa']= 0
python中没有do while循环。可以由如下代码代替
while True: xxxx if condtion满足: break
求列表元素个数
len(list)
for i in range(a,b)
包含a不包含b```
for line in file:line = line.spilt(',‘)
这样读出来的列表元素全是字符串形式!
而且 末尾的/n也会包含在最后一个字符里28. `str.strip()`去掉字符串末尾字符(常用来去掉'/n'等 29. `list`有序而`dict`无序 30. ```python total_list = sorted(total_dict.items(), key=lambda x: x[1]) for (key, value) in total_list:
python中字典是无序的,list是有序的
想要对字典或列表等排序需要借助sort
函数。然而由于字典是无序的,经sort
函数操作之后会变成一个列表。如果直接使用sort(dict.values)
的话,将生成一个只由字典的value构成的排序后的列表,如果sort(dict.keys)
的话同理为只由键组成的排序后的列表。如果要输出键值对的话,就按照上面的代码,转化为了有序元组列表的形式。lambda
表示语法形式lambda x: x[1]
中x[0]
表示对键进行排序,x[1]
表示对值进行排序sort
函数默认是从小到大排序,如果要从大到小则添加参数reverse=True
【以上内容可继续探索】python3 中
\
即为直接除法判断类型是
type(a) is dict
不是a is dict
!字典无法在遍历中动态改变,而类别可以
Debug:Error loading notebook An unknown error occurred while loading this notebook.
这个错误的弥补方法是修改~/.local/share/jupyter文件夹的权限:sudo chmod -R 777 ~/.local/share/jupyter
if os.path.splitext(resPath + file)[1] == ‘.jpg’
ls -l filename|grep total
统计文件夹下文件个数递归删除文件夹
shutil.rmtree(path=folderPath)
在shutil库下python多进程默认不能共享全局变量
https://blog.csdn.net/houyanhua1/article/details/78236514
python多进程相当于将环境所有变量什么的给每一个进程复制一份,所以你在子进程修改了变量自然不会修改到全局python子进程不报错 需要用
try: except Exception as ex: print(ex)
来捕获
重置索引用reset_index然后drop掉index列即可
reindex就是一坨屎截取字符串操作
str = ‘0123456789’ print str[0:3] #截取第一位到第三位的字符 print str[:] #截取字符串的全部字符 print str[6:] #截取第七个字符到结尾 print str[:-3] #截取从头开始到倒数第三个字符之前 print str[2] #截取第三个字符 print str[-1] #截取倒数第一个字符 print str[::-1] #创造一个与原字符串顺序相反的字符串 print str[-3:-1] #截取倒数第三位与倒数第一位之前的字符 print str[-3:] #截取倒数第三位到结尾 print str[:-5:-3] #逆序截取,具体啥意思没搞明白?
位运算
np.bitwise_and([7],[3])=3 np.bitwise_or([7],[3])=7
路径字符串分割
path.split('/')[-1] 以/为分隔符,保留倒数第一段
dataFrame.to_csv(savePath,mode='a',header=0,index=False)
python list/字符串替换
# Python replace() 方法把字符串中的 old(旧字符串/list) 替换成 new(新字符串/list),如果指定第三个参数max,则替换不超过 max 次。 str = str.replace(old, new[, max]) # 注意不会改变原始内容,要赋值回去!
python多线程
# 由于每个python模块(python文件)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py)。如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“__main__”等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,__name__ == '__main__'结果为真;而当模块被import到其他模块中时,__name__ == '__main__'结果为假,就是不调用对应的方法。 # __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被运行 from multiprocessing import Pool #创建线程对象 pool = Pool(processes=k) #开始执行线程内容 func即为我们每个线程要执行的东西,args为传入func函数参数 pool.apply_async(func,args=(agr1,arg2,arg3)) #等待所有进程结束 pool.close() pool.join()
常见迭代方法:
for index, item in enumerate(list)
os.path.getsize
函数的单位为字节B正则表达式
https://blog.csdn.net/u014535666/article/details/82972089#
注意python3中 .? .+等要用括号包起来!(.?)
(.+)
且注意 findall返回的list元组!
python正则表达式常用函数的理解:
https://www.cnblogs.com/papapython/p/7482349.htmldf.drop(x) 如果df.drop([等式]) 会出事!直接全没了! 验证一下
linux语句返回输出
os.system()可以执行linux语句但无法获取输出
os.popen()
就可以获取命令行输出 ,返回的是一个文件
还要r = os.popen(commend) result = r.read()
python赋值、copy与deepcopy
list中套list得用deepcopy
https://blog.csdn.net/u010712012/article/details/79754132
赋值与深浅拷贝
https://www.cnblogs.com/Eva-J/p/5534037.html
python一切都是对象,赋值是传递引用eval函数在python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型.
注意 为了安全性 还有个ast.literal_eval
http://www.php.cn/python-tutorials-376459.htmlxgboost版本为0.6a1的时候 对应scikit-learn的版本为0.19.0
版本要匹配!弱智错误:
os.system(str)
里面只能是一个字符串,如果是要多段拼接是用加号不是逗号!os.system("ps","-ef") 错误!
os.system("ps"+"-ef")正确!
python继承
#定义类A class A: #B继承A class B(A):
if __name__ == '__main__':
os.path.join
用这个组合路径更好!format函数 (python格式化输出)
https://www.runoob.com/python/att-string-format.html
format函数输出可以不限制括号内的参数类型,转化为字符串输出
format 函数可以接受不限个参数,位置可以不按顺序。"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序 >>'hello world' "{0} {1}".format("hello", "world") # 设置指定位置 >>'hello world' "{1} {0} {1}".format("hello", "world") # 设置指定位置 >>'world hello world'
也可以设置参数
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com")) # 通过字典设置参数 site = {"name": "菜鸟教程", "url": "www.runoob.com"} print("网站名:{name}, 地址 {url}".format(**site)) # 通过列表索引设置参数 my_list = ['菜鸟教程', 'www.runoob.com'] print("网站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是必须的 >>网站名:菜鸟教程, 地址 www.runoob.com 网站名:菜鸟教程, 地址 www.runoob.com 网站名:菜鸟教程, 地址 www.runoob.com
也可以向 str.format() 传入对象:
class AssignValue(object): def __init__(self, value): self.value = value my_value = AssignValue(6) print('value 为: {0.value}'.format(my_value)) # "0" 是可选的 >>value 为: 6
数字格式化:
print("{:.2f}".format(3.1415926)); >>3.14
更多用法列表见网页
可以这样用
print('-'*10)
除法
/
一般除法//
整除%
求余plt画图
导库import matplotlib.pyplot as plt
https://blog.csdn.net/majinlei121/article/details/83994935
常用函数(用法参数见help)plt.plot()
画图plt.show()
显示图像plt.legend()
显示图像和图例plt.xticks()``plt.yticks()
x,y坐标轴的值设置(可以设置旋转坐标值等)plt.xlabel()``plt.ylabel()
x,y轴标签设置plt.title()
设置图像标题w1 = plt.figure()
新建一个画图窗口 w1指向ax1 = fig.add_subplot(2,1,1)
向窗口中加入子图,参数为排列位置, ax1指向, 画2行1列个图形的第1个ax1.plot()
向ax1中画图注意:无论是在子图中画图还是直接画图,都要用
plt.show()
来显示图像
在子图中画图,要用子图窗口.plot()
来画图,不用子图则plt.plot()来画图
plt.scatter()
画散点图plt.bar()
画柱状图返回对象的属性值
vars()
用法vars(object)
可用于很多封装对象zip函数 打包
网上摘抄理解
https://www.cnblogs.com/waltsmith/p/8029539.htmlzip函数非常好用!常用
class()(x)
这种用法class()
即为生成class对象,后面跟个(x)
就是调用该生成对象的方法!getitem()
如果类中定义了getitem()方法,那么它的实例对象(假设为P)就可以P[Key]这样取值。当实例对象做P[Key]运算的时候就会调用getitem()方法,返回的就是这个方法的returnpip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simple
中科大源