Python的一些语法知识点1(零碎)
前言
包括:
1.各个符号代表的意思
2.使用pycharm遇到的问题以及解决方法
一、各种语法符号 1. “//”:地板除
先做除法再向下取整
d0 = height_frame // 22. 打开文件
open()打开一个文件,创建一个 file 对象
fp = open(video_path,'rb')3. file seek()
seek (offset[, whence]) 用于移动文件读取指针到指定位置。
offset: 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。
fp = open(video_path,'rb') fp.seek(blk_size * startfrm, 0) #跳到从文件开头移动blk_size * startfrm个字节的位置4.file write()
向文件里写入文本
data = fp.read(blk_size) with open(new_video_path,'ab+') as fp_new: fp_new.write(data) #向文件里添加文本5.os
os 中文就是操作系统的意思,Python 的 os 模块提供了各种操作系统的接口,这些接口主要是用来操作文件和目录。
(1) os.getcwd()
查看当前路径。
import os print(os.getcwd())
(2) os.listdir(path)
返回指定目录下包含的文件和目录名列表。
path为需要列出的目录路径
import os, sys # 打开文件 path = "/var/www/html/" dirs = os.listdir( path ) # 输出所有文件和文件夹 for file in dirs: print (file)
(3) os.path.isfile(path)
判断 path 是否为文件。
import os
print(os.path.isfile('E:/tmp.txt'))
(4) os.path.getsize(path)
返回 path 的大小,以字节为单位,若 path 是目录则返回 0。
import os
size = os.path.getsize('E:/tmp.txt')
print(os.path.getsize('E:/work'))
6. ord
语法:ord(c)
返回值是字符c对应的十进制整数。
用于从文件读取指定的字节数,如果未给定或为负则读取所有。
data = fp.read(blk_size) #从当前位置往后,读出blk_size位8.reshape()
不改变数组元素的前提下,改变数组形状;如将一位数组,改变为2维、3维等
x=np.array([1,2,3,4,5,6,7,8]) y=x.reshape(2,4) 输出:y=([1,2,3,4],[5,6,7,8])9.append(object)
添加一个元素object到列表尾部,无返回值
10.numpy里的array()Numpy主要对象是齐次多维数组,由正整数元组索引,Numpy中维度称为轴(axis),数组的维数称为秩(rank)。
array():创建数组
import numpy as np #一维数组 a=np.array([2,3,4]) b=np.array([2.,3.,4.]) #二维数组 c=np.array([[1.,2.],[3.,4.]]) d=np.array([[1,2],[3,4]],dtype=complex) 原文链接:https://blog.csdn.net/MsSpark/article/details/8305000011.with 关键字
Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。简化了文件流等公共资源的管理,处理文件对象时常使用 with 关键字。
with open(video_path,'rb') as fp:
data = fp.read(blk_size)#读取所有通道的数据,包含亮度和色度
使用 with 关键字系统会自动调用 f.close() 方法,发生执行异常时,文件会被关闭,不会因为执行异常而占用资源。
12.类和实例类是抽象的模板(描述包含哪些元素), 实例是根据类创建出来的一个个具体的“对象”
class FrameYUV(object): pass
(Object)表示该类从哪个类继承下来的,Object类是所有类都会继承的类。
创建实例是通过类名+()实现:
frame_YUV=FrameYUV()
__init__方法强制添加属性;第一参数永远是类的本身实例变量self,并且调用时,不用传递该参数;
class FrameYUV(object):
def __init__(self, Y, U, V):
self._Y = Y #一个下划线开头的实例变量,外部是可以访问的但约定不能随便访问(需要当成私有变量)
self.U = U #外部可以访问
self.__V = V #两个下划线开头的变量,外部不能访问,如需访问再类里定义函数,如下;
def get_V(self):
return self.__V
直接调用frame_YUV.get_V()就可以获得变量V的值。
13.try…except程序发生的异常经 try 捕获并由 except 处理完成
try:
可能产生异常的代码块
except [ (Error1, Error2, ... ) [as e] ]: #给异常类型起一个别名e
处理异常的代码块1
except [ (Error3, Error4, ... ) [as e] ]:
处理异常的代码块2
except [Exception]:
处理其它异常
[] 括起来的部分可以使用,也可以省略; 一个 except 块可以同时处理多种异常。
14. assert语法: assert expression
assert(file_bytes % frame_bytes == 0) #表达式条件为 false 的时候触发异常。
表达式条件为 false 的时候触发异常。
15.np.ascontiguousarray()将一个内存不连续存储的数组转换为内存连续存储的数组,使得运行速度更快。
通过数组的**.flags**属性,可以查看一个数组是C连续还是Fortran连续的;
C order 指的是行优先的顺序(Row-major Order),即内存中同行的元素存在一起,Fortran Order则指的是列优先的顺序(Column-major Order),即内存中同列的元素存在一起。
Pascal, C,C++,Python都是行优先存储的,而Fortran,MatLab是列优先存储的。
提示:PermissionError: [Errno 13] Permission denied:‘H:/TestSequences/ClassB’
网上搜索了一下答案,windows下这个报错一般不是权限的问题,是文件路径或者文件名写了多余的“n”等符号或者文件找不到、被占用,或者打开的不是文件而是文件夹。
思考1:只提示了classB这个文件夹的权限被拒绝,是不是文件夹命名的问题?
按照这个思路修改了文件名以后classB文件夹不再报错,但其他的文件夹依然报相同的错误,问题并未解决。
思考2:路径里面还有文件夹
代码如下,video_path = walk_file+‘/’+video_file里video_file是文件名而不是文件夹的名字,因此修改new_video_path对应的地方为文件名就可以了
walk_file = 'H:/TestSequences/Class_D'
video_files = os.listdir(walk_file)#读取当前文件夹下的所有文件名列表
for video_file in video_files:#读当前文件夹下所有文件
video_path = walk_file+'/'+video_file
#这里的意思是 文件夹/文件名
height = 240
width = 416
frame = 15
new_video_path = 'H:/TestSequences/Class_D/RaceHorses.yuv'
#这里的意思是生成一个新的YUV名称为RaceHorses.yuv,存的路径如上;
write_yuv(video_path,height,width,frame,new_video_path,count)
#新的序列组成为每个序列(video_files里)取前15帧拼接在一起。
count=count+1
2.找不到模块名为xxx
import data_info as di **提示**:No module named 'data_info'
思路:如果是Python的包,则直接在pycharm终端安装对应包,在下图点击终端输入: pip install 包名
报错,因为python对应的版本已经删除了这个模块,这种情况需要查找新版本的Python这个模块的替代进行安装同时需要修改代码;
如果是自定义的模块,将该模块的路径添加到环境变量
一般最后一句是sys.path.append(‘路径’);如果是pycharm:直接选中模块所在文件夹将其“标记为源根”



