前言
csv文件格式的文件CANoe无法识别,需要转换为asc文件,记录转换过程中的操作过程。
一、操作过程
1.获取路径下的文件
获取文件夹下的所有文件夹,将所有的文件名称保存到列表内操作。
filedir = "./resource/"
file_generate = './out/'
file_namelist = os.listdir(filedir) # file_namelist 为存储filedir路径下的文件的列表
遍历file_namelist列表的每一个元素,str类型的变量file_name接 .split(“.”)就是以点为分割条件将str类型的变量切割为列表保存。
for file_name in file_namelist:
file_path = filedir + file_name # csv文件路径
file_name_no_csv = file_name.split(".") # csv文件名去除 .csv 后缀
创建每一个asc文件的路径
def file_creat(file_name, content):
# 如果文件路径不存在则创造路径
if not os.path.exists(file_generate):
os.makedirs(file_generate)
csv_file_path_creat = file_generate + file_name
csv_file_path_creat_name = csv_file_path_creat
return csv_file_path_creat_name
2.打开文件
如何打开一个文件,使用 with open(文件绝对路径, mode='r', encoding='utf-8') as file_object:打开,mode代表了模式,r是读,w是写(如果文件不存在就创造一个),encoding是编码方式,file_object就是读取的文件的全部内容,同时获取文件的总行数。
def csv_convert_asc(file_path, asc_filename):
count_num = 0 # 计算次数计时器
with open(file_path, mode='r', encoding='utf-8') as file_object: # 打开csv文件
with open(asc_filename, mode='w', encoding='utf-8') as file_asc: # 创造一个asc文件
file_object.readline() # 舍弃csv第一行
total = sum(1 for line in open(file_path, encoding='utf-8')) # 获取csv文件总行数
遍历获取文件内容的行数与每一行的数据。
for num, i in enumerate(file_object):
Device_ID, Receive_time, Frame_ID, Data_content = i.strip().split(',')
num:当前文件行数
i:当前文件行的文件内容
将文件每一行的内容i去掉空格后以 ”,” 作为分隔符,将每一个数据用左侧的变量保存。
3.其他功能
将日期转化为星期几的方法,传入的日期格式为:年+符号+月+符号+日
week = datetime.strptime(date_day, '%Y-%m-%d').weekday()
上面指令中的%Y-%m-%d就是指定了str类型变量date_day的时间格式
求取时间差
def file_creat(file_name, content):
# 如果文件路径不存在则创造路径
if not os.path.exists(file_generate):
os.makedirs(file_generate)
csv_file_path_creat = file_generate + file_name
csv_file_path_creat_name = csv_file_path_creat
return csv_file_path_creat_name
字符串 + .replace(“字符”, “”) 去除字符操作
result / time_start_in:str类型变量,将其转换为datetime类型变量,时间格式为%Y-%m-%d %H:%M:%S.%f
time_num = (date3_after - date3_start).total_seconds()
返回一个秒数
将变量 delta_time 格式化为带有六位小数的字符串形式
delta01_time = Time_Sub(Record_Time_, Record_Time) # 第一列数据
delta_time = delta01_time
delta_time_8 = format(delta_time, '.6f')
例如将 2.3456789保存为 2.345679
总结
将csv文件转换asc文件的简要记录。