目录
字符串处理
正负数转换
dict() 函数
取整
自增和自减
保留n位小数
PriorityQueue
multiprocessing的例子
Python 3 generator的next方法
引用上级或上上级目录中的文件
astype()
super()
python range函数
正负无穷
删除文件夹下所有文件
复制文件
xlsxwriter
图像处理
numpy相关
生成新对象
交换值
打印
pandas的to_csv最左边多一列的问题
整数相除返回浮点数
读取键盘输入
字符串处理
见以下链接:
https://blog.csdn.net/ytomc/article/details/113970424
正负数转换
负数转正数:abs(n)
正数转负数:int("-"+str(n))
dict() 函数
创建一个字典。
>>>dict() # 创建空字典
{}
>>> dict(a='a', b='b', t='t') # 传入关键字
{'a': 'a', 'b': 'b', 't': 't'}
>>> dict(zip(['one', 'two', 'three'], [1, 2, 3])) # 映射函数方式来构造字典
{'three': 3, 'two': 2, 'one': 1}
>>> dict([('one', 1), ('two', 2), ('three', 3)]) # 可迭代对象方式来构造字典
{'three': 3, 'two': 2, 'one': 1}
>>>
取整
向上取整
math.ceil( x )
向下取整
math.floor( x )
自增和自减
在python中是没有自增和自减的,但在python中存在 i = i + 1和 i = i -1 的情况。 因为Python的模型规定,数值对象是不可改变的。 i = i + 1 相当于重新创建了一个变量 i ,而不是改变了 i 中的数值。
保留n位小数
用round函数 例如: a=12.34567889 round(a,2)=12.35 保留两位小数 round(a,2)=12.35 保留三位小数
PriorityQueue
PriorityQueue是优先级队列。越小的优先级越高,会被先取出。
优先队列在插入元素的时候已经对元素做了排序,把最小的元素放在队尾。
Python在对tuple类型作比较时,采用的是按照元素顺序,找到第一个可比较的元素进行比较。
multiprocessing的例子
同时展示了queue和pipe的用法,在image_put, image_get, predict 函数中参数要对应上。
queue获得队列中数据用的是get()方法,pipe获得队列数据用的是recv()方法。
import multiprocessing as mp
pipe = mp.Pipe()
mp.set_start_method(method='spawn') # init
queues = [mp.Queue(maxsize=4) for _ in camera_ip_l]
processes = []
for queue, camera_ip in zip(queues, camera_ip_l):
processes.append(mp.Process(target=image_put, args=(queue, user_name, user_pwd, camera_ip)))
processes.append(mp.Process(target=image_get, args=(queue, camera_ip,pipe[0],)))
processes.append(mp.Process(target=predict, args=(pipe[1],)))
for process in processes:
process.daemon = True
process.start()
for process in processes:
process.join()
Python 3 generator的next方法
g.next() 改为 g.__next__()
g.next()是python 2的用法
引用上级或上上级目录中的文件
上级引用 import sys sys.path.append("..")
上上级引用 import sys sys.path.append("...")
astype()
转换数组的数据类型。
int32 --> float64 完全ojbk
float64 --> int32 会将小数部分截断
string_ --> float64 如果字符串数组表示的全是数字,也可以用astype转化为数值类型
super()
super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class FooParent(object):
def __init__(self):
self.parent = 'I'm the parent.'
print ('Parent')
def bar(self,message):
print ("%s from Parent" % message)
class FooChild(FooParent):
def __init__(self):
# super(FooChild,self) 首先找到 FooChild 的父类(就是类 FooParent),然后把类 FooChild 的对象转换为类 FooParent 的对象
super(FooChild,self).__init__()
print ('Child')
def bar(self,message):
super(FooChild, self).bar(message)
print ('Child bar fuction')
print (self.parent)
if __name__ == '__main__':
fooChild = FooChild()
fooChild.bar('HelloWorld')
python range函数
python range() 函数可创建一个整数列表。
函数语法 range(start, stop[, step])
参数
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5); stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
倒序
for i in range(5, -1, -1)
如果倒序的话最后要定义一个-1表示倒序,并且-1的步长。
正负无穷
float("inf"), float("-inf")
删除文件夹下所有文件
def del_file(path_data):
for i in os.listdir(path_data) :# os.listdir(path_data)#返回一个列表,里面是当前目录下面的所有东西的相对路径
file_data = path_data + "/" + i#当前文件夹的下面的所有东西的绝对路径
if os.path.isfile(file_data) == True:#os.path.isfile判断是否为文件,如果是文件,就删除.如果是文件夹.递归给del_file.
os.remove(file_data)
else:
del_file(file_data)
path_data = r"E:codepracticedata"
del_file(path_data)
复制文件
方法很多,我经常用的是shutil.copy
shutil.copy(source, destination)
xlsxwriter
xlsxwriter这个模块,它生成的文件后缀名为.xlsx,最大能够支持1048576行数据,16384列数据
wirte(row, col, *args)
向工作表单元格写入普通的数据。
参数:
- row - 单元格所在的行(索引从0开始计数)
- col - 单元格所在的列(索引从0开始计数)
- *args - 传递到子方法的附加参数诸如数字,字符串,单元格格式。
Excel区分不同的数据类型诸如字符串,数字,空格,公式和超链接。为了简化向XlsxWriter文件写入数据的过程, write()方法作为以下几个特定方法的假名(译者注:意思就是通常不需要程序员显式地指定以下方法,在使用write()方法时XlxsWriter会按照规则判断数据类型并采用对应的方法写入数据):
- write_string()
- write_number()
- write_blank()
- write_formula()
- write_datetime()
- write_boolean()
- write_url()
write()处理数据的规则如下:
- 数据类型诸如float, int, long, decimal.Decimal和fractions.Fraction 使用write_number()方法。
- 数据类型诸如datatime.datetime,datetime.datedatetime.time 或 datetime.timedelta 使用write_datetime()方法。
- None和空字符串“”使用write_blank()方法。
- 数据类型bool使用write_boolean()。
字符串(String)则按照以下规则处理数据:
- 以“=”开始的匹配公式字符串使用write_formula()方法。这个方法可以被覆盖,见下。
- 匹配支持的URL的字符串使用write_url()方法。这个方法可以被覆盖,见下。
- 为了防止Excel警告“Numbers Stored as Text”,当Workbook()构造器strings_to_numbers选项为True时,被float()方法转换为数字的字符串会使用write_number()方法。见下。
- 不匹配以上条件的字符串会使用write_string()方法。
如果值不匹配以上所有类型,最终会使用 float()来检查它是否与用户定义的浮点类型相对应。如果不对应,则会使用 write_number()方法。
最后,如果这些规则全都不匹配,那么程序会抛 TypeError异常。
例子
import xlsxwriter
#写excel
def write_excel():
workbook = xlsxwriter.Workbook('chat.xlsx')#创建一个excel文件
worksheet = workbook.add_worksheet(u'sheet1')#在文件中创建一个名为TEST的sheet,不加名字默认为sheet1
worksheet.set_column('A:A',20)#设置第一列宽度为20像素
bold= workbook.add_format({'bold':True})#设置一个加粗的格式对象
worksheet.write('A1','HELLO')#在A1单元格写上HELLO
worksheet.write('A2','WORLD',bold)#在A2上写上WORLD,并且设置为加粗
worksheet.write('B2',U'中文测试',bold)#在B2上写上中文加粗
worksheet.write(2,0,32)#使用行列的方式写上数字32,35,5
worksheet.write(3,0,35.5)#使用行列的时候第一行起始为0,所以2,0代表着第三行的第一列,等价于A4
worksheet.write(4,0,'=SUM(A3:A4)')#写上excel公式
workbook.close()
if __name__ == '__main__':
# 写入Excel
write_excel();
print ('写入成功')
图像处理
见以下链接:
https://blog.csdn.net/ytomc/article/details/113876176
numpy相关
见以下链接:
https://blog.csdn.net/ytomc/article/details/113970212
生成新对象
python中对象,赋值后是同一地址,如果是可变对象,对其中一个修改会影响到另一个,如果要生成完全新的对象,应使用deepcopy
import copy
data1=copy.deepcopy(data)
交换值
arr[i], arr[j] = arr[j], arr[i]
打印
python的print字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,如果字符串里面没有表达式,那么前面加不加f输出应该都一样。
pandas的to_csv最左边多一列的问题
设置index = False
整数相除返回浮点数
文件第一行
from __future__ import division
然后正常写相除的代码即可。
读取键盘输入
# -*- coding: utf-8 -*-
import sys
#输入的无论是什么,都会转成字符和字符串
#sys.stdin.readline() 会读取末尾'n',加.strip(),去掉回车符,同时去掉前后的空格
# 一
#输入一个数
n = int(sys.stdin.readline().strip()) #输入一个元素,并转成整型int
print(n)
# 二
#输入有n行(已知行数n),用for循环,一行有任意个字符字符串都可以
seq = [ ]
for i in range(n):
line = sys.stdin.readline().strip() #line此时是字符串列表,不知line有多少个元素
value = map(int,line.split()) #map(函数,列表)Python2.返回列表,Python3.返回迭代器。
seq += value #合并每一行列表
print(seq)
# 三
#不确定输入有多少行,用while循环
seq = [ ]
while 1:
line = sys.stdin.readline().strip() #line此时是字符串列表,并已去掉前后空格 回车符
if line:
line = map(int,line.split()) #把line的空格元素去掉,转成字符串列表list,并转成整型int
else:
break
seq += line
print(seq)



