【project1】对数据读取处理和写入

主要工作:

从云平台读取数据包,包括.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数据
FormatC Typepython
xpad byteno value
ccharsrtring of length 1
bsigned charinteger
Bunsigned charinteger
hshortinteger
Hunsigned charinteger
iintinteger
Iunsigned intlong
Lunsigned longlong
qlong longlong
Qunsigned long longlong
ffloatfloat
ddoublefloat
schar[]string
Pchar[]string
pvoid *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。我们可以为该参数使用其他复制函数,例如复制,复制树等。

总结:

一个好的项目经理很重要,项目需求书清晰是必要且首要的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值