主要工作:
从云平台读取数据包,包括.cmsd二进制数据流和.dcfg配置信息文件,读取.cmsd文件以8位为一个数据,三个数据为一组,为同一时刻x轴,y轴,z轴数据。读取.dcfg文件,获得实际探测率(fs值)<ParseFreq>的值。针对所得数据和fs值对数据进行特征值提取。并将特征值写入txt文件。
将二进制数据转换为double数据:
# 将数据转换为double数据
def get_cmsd(data_path):
lists = [] # 定义一个list用于存放转换后的数据
with open(data_path, "rb") as f: # 以二进制方式打开文件读取内容
while True:
num = f.read(8) # 每8个字节读取一个数据
if not num:
break # 数据读完后退出循环
t = struct.unpack('d', num) # 把读取的数据转换为double数据
lists.append(t[0]) # 放到list内
return lists
python中struct.unpack用法:
Python中按一定的格式取出某字符串中的子字符串,使用struck.unpack是非常高效的。
1.设置format格式,如下:
# 取前两个字符,跳过三个字符,再取四个字符
format = '2s 3x 4s'
2.使用struck.unpack获取子字符串
import struct
print struck.unpack(format.'Hello World')
#('He','Wor')
利用unpack(),读入一个bin文件:
t = struct.unpack('d', num) # 把读取的数据转换为double数据
Format | C Type | python |
---|---|---|
x | pad byte | no value |
c | char | srtring of length 1 |
b | signed char | integer |
B | unsigned char | integer |
h | short | integer |
H | unsigned char | integer |
i | int | integer |
I | unsigned int | long |
L | unsigned long | long |
q | long long | long |
Q | unsigned long long | long |
f | float | float |
d | double | float |
s | char[] | string |
P | char[] | string |
p | void * | integer |
表格原创链接:python中struct.unpack的用法_gracioushe的博客-CSDN博客_python struct.unpack
逐个打开文件:
def get_lastest_created_child_directory(path):
lists = os.listdir(path) # 列出目录的下所有文件和文件夹保存到lists
lists.sort(key=lambda fn: int(fn.split('.')[0])) # 按文件顺序排序
lastest_created_file_directory = os.path.join(path, lists[-1]) # 获取最新的文件保存到file_new
return lastest_created_file_directory
os模块:
os
模块中大多数接受路径作为参数的函数也可以接受“文件描述符”作为参数。
文件描述符:file descriptor,在 Python 文档中简记为 fd,是一个与某个打开的文件对象绑定的整数,可以理解为该文件在系统中的编号。
os.listdir()
“listdir”即“list directories”,列出(当前)目录下的全部路径(及文件)。该函数存在一个参数,用以指定要列出子目录的路径,默认为“.”
,即“当前路径”。
函数返回值是一个列表,其中各元素均为字符串,分别是各路径名和文件名。
通常在需要遍历某个文件夹中文件的场景下极为实用。
lists = os.listdir(path) # 列出目录的下所有文件和文件夹保存到lists
os.path 模块
其实这个模块是os
模块根据系统类型从另一个模块导入的,并非直接由os
模块实现,比如os.name
值为nt
,则在os
模块中执行import ntpath as path
;如果os.name
值为posix
,则导入posixpath
。
使用该模块要注意一个很重要的特性:os.path
中的函数基本上是纯粹的字符串操作。换句话说,传入该模块函数的参数甚至不需要是一个有效路径,该模块也不会试图访问这个路径,而仅仅是按照“路径”的通用格式对字符串进行处理。
更进一步地说,os.path
模块的功能我们都可以自己使用字符串操作手动实现,该模块的作用是让我们在实现相同功能的时候不必考虑具体的系统,尤其是不需要过多关注文件系统分隔符的问题。
os.path.getsize()
Python中的os.path.getsize()方法用于检查指定路径的大小。它返回指定路径的大小(以字节为单位)。如果文件不存在或以某种方式无法访问,该方法将引发OSError。
#判断目标文件是否为空
if os.path.getsize(last_filename) == 0:
os.path.join()
这是一个十分实用的函数,可以将多个传入路径组合为一个路径。实际上是将传入的几个字符串用系统的分隔符连接起来,组合成一个新的字符串,所以一般的用法是将第一个参数作为父目录,之后每一个参数即使下一级目录,从而组合成一个新的符合逻辑的路径。
但如果传入路径中存在一个“绝对路径”格式的字符串,且这个字符串不是函数的第一个参数,那么其他在这个参数之前的所有参数都会被丢弃,余下的参数再进行组合。更准确地说,只有最后一个“绝对路径”及其之后的参数才会体现在返回结果中。
lastest_created_file_directory = os.path.join(path, lists[-1]) # 获取最新的文件保存到file_new
os.path.split()
函数os.path.split()
的功能就是将传入路径以最后一个分隔符为界,分成两个字符串,并打包成元组的形式返回。
for file in files:
filename, extension = os.path.splitext(file)
if _filename is None:
_filename = filename
if extension == ".cmsd":
parsed_cmsd_content = get_cmsd(path + '\\' + _filename + '\\' + file) # 获取.cmsd 文件数据
elif extension == ".dcfg":
parsed_dcfg_content = get_dcfg(path + '\\' + _filename + '\\' + file) # 获取.dcfg文件
os.path模块常用方法
os.path.abspath(path) | 返回绝对路径 |
os.path.basename(path) | 返回文件名 |
os.path.commonprefix(list) | 返回list(多个路径)中,所有path共有的最长的路径 |
os.path.dirname(path) | 返回文件路径 |
os.path.exists(path) | 如果路径 path 存在,返回 True;如果路径 path 不存在或损坏,返回 False。 |
os.path.lexists(path) | 路径存在则返回 True,路径损坏也返回 True |
os.path.expanduser(path) | 把 path 中包含的 ~ 和 ~user 转换成用户目录 |
os.path.expandvars(path) | 根据环境变量的值替换 path 中包含的 $name 和 ${name} |
os.path.getatime(path) | 返回最近访问时间(浮点型秒数) |
os.path.getmtime(path) | 返回最近文件修改时间 |
os.path.getctime(path) | 返回文件 path 创建时间 |
os.path.getsize(path) | 返回文件大小,如果文件不存在就返回错误 |
os.path.isabs(path) | 判断是否为绝对路径 |
os.path.isfile(path) | 判断路径是否为文件 |
os.path.isdir(path) | 判断路径是否为目录 |
os.path.islink(path) | 判断路径是否为链接 |
os.path.ismount(path) | 判断路径是否为挂载点 |
os.path.join(path1[, path2[, ...]]) | 把目录和文件名合成一个路径 |
os.path.normcase(path) | 转换path的大小写和斜杠 |
os.path.normpath(path) | 规范path字符串形式 |
os.path.realpath(path) | 返回path的真实路径 |
os.path.relpath(path[, start]) | 从start开始计算相对路径 |
os.path.samefile(path1, path2) | 判断目录或文件是否相同 |
os.path.sameopenfile(fp1, fp2) | 判断fp1和fp2是否指向同一文件 |
os.path.samestat(stat1, stat2) | 判断stat tuple stat1和stat2是否指向同一个文件 |
os.path.split(path) | 把路径分割成 dirname 和 basename,返回一个元组 |
os.path.splitdrive(path) | 一般用在 windows 下,返回驱动器名和路径组成的元组 |
os.path.splitext(path) | 分割路径,返回路径名和文件扩展名的元组 |
os.path.splitunc(path) | 把路径分割为加载点与文件 |
os.path.walk(path, visit, arg) | 遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数 |
os.path.supports_unicode_filenames | 设置是否支持unicode路径名 |
表格原创链接:Python os.path 模块 | 菜鸟教程
将文件排序
在python环境中提供两种排序方案:
1.用库函数sorted()对字符串排序,它的对象是字符
2.用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要将文件后缀名屏蔽。
lists.sort(key=lambda fn: int(fn.split('.')[0])) # 按数字顺序排序
按文件名字符串小写排序
list.sort(key=lambda x: x.lower())
按创建时间排序
list.sort(key=lambda x: os.path.getctime(x)) # 精确到秒
对txt文件关键字的读取、
# 从dcfg中读取fs值
def get_dcfg(date_path):
with open(date_path, 'r') as f1: # 以文本方式打开文件读取内容
lines = f1.readlines() # 以行读取
for lines in lines:
if '<ParseFreq>' in lines: # 查找关键字ParseFreq
just_fs = float(lines[19:30]) * 2.56 # 实际采样率fs
return just_fs
readline()函数
readline() 函数用于读取文件中的一行,包含最后的换行符“\n”。此函数的基本语法格式为:
file.readline([size])
其中,file 为打开的文件对象;size 为可选参数,用于指定读取每一行时,一次最多读取的字符(字节)数。
和 read() 函数一样,此函数成功读取文件数据的前提是,使用 open() 函数指定打开文件的模式必须为可读模式(包括 r、rb、r+、rb+ 4 种)。
readlines()函数
readlines() 函数用于读取文件中的所有行,它和调用不指定 size 参数的 read() 函数类似,只不过该函数返回是一个字符串列表,其中每个元素为文件中的一行内容。
和 readline() 函数一样,readlines() 函数在读取每一行时,会连同行尾的换行符一块读取。
readlines() 函数的基本语法格式如下:
file.readlines()
对数据处理好的文件移动到历史文件夹
shutil.move(path + "\\" + file_name, "D:\\syhistory")
Shutil模块
Python提供了许多对文件和文件集合进行高级操作的函数。它属于Python的标准实用程序模块。该模块有助于自动执行文件和目录的复制和删除过程。shutil.move()
方法将文件或目录(源)递归移动到另一个位置(目标)并返回目标。如果目标目录已经存在,则将src移动到该目录中。如果目标已经存在但不是目录,则可能会被覆盖,具体取决于os.rename()
语义。
用法:
shutil.move(source, destination, copy_function = copy2)
参数:
source: 代表源文件路径的字符串。
destination: 代表目标目录路径的字符串。
copy_function(可选):此参数的默认值为copy2。我们可以为该参数使用其他复制函数,例如复制,复制树等。
总结:
一个好的项目经理很重要,项目需求书清晰是必要且首要的