Python将CSV文件转换为ASC文件供CANoe分析


前言

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文件的简要记录。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个用Python编写的将ASC文件转换CSV文件的简单示例: ``` import csv # 打开ASC文件CSV文件 with open('example.asc', 'r') as asc_file, open('example.csv', 'w', newline='') as csv_file: # 读取ASC文件的每一行并将其写入CSV文件 writer = csv.writer(csv_file) for line in asc_file: row = line.strip().split() writer.writerow(row) ``` 这个示例中,我们使用了Python内置的csv模块来处理CSV文件。首先,我们使用 `open()` 函数打开ASC文件CSV文件。在打开CSV文件时,我们需要使用 `newline=''` 来避免写入CSV文件时出现空行。 然后,我们使用 `csv.writer()` 函数创建一个写入器对象,并使用 `for` 循环逐行读取ASC文件。对于每一行,我们使用 `strip()` 方法去除开头和结尾的空格,然后使用 `split()` 方法将行分割成单独的数据项。最后,我们使用写入器对象的 `writerow()` 方法将数据项写入CSV文件。 注意,这个示例假设ASC文件中的每一行都是由空格分隔的数据项。如果ASC文件使用不同的分隔符,需要相应地修改 `split()` 方法的参数。 ### 回答2: Python是一种强大的编程语言,可以用于开发各种工具和应用程序。下面是一个用Python编写的文件转换工具,可以将".asc"文件转换为".csv"文件: ```python import csv def convert_asc_to_csv(asc_file, csv_file): with open(asc_file, 'r') as file: lines = file.readlines() # 处理asc文件的内容 data = [] for line in lines: # 忽略空行和注释行 if not line.strip() or line.strip().startswith('//'): continue # 以空格为分隔符将每行数据划分为列表 row_data = line.strip().split(' ') # 如果需要对每个数据元素进行特定处理,可以在这里添加相关代码 # 将处理后的数据添加到结果列表中 data.append(row_data) # 将结果写入csv文件 with open(csv_file, 'w', newline='') as file: writer = csv.writer(file) writer.writerows(data) # 测试 asc_file = 'input.asc' # 要转换asc文件 csv_file = 'output.csv' # 转换后的csv文件 convert_asc_to_csv(asc_file, csv_file) print("转换完成!") ``` 以上代码定义了一个`convert_asc_to_csv`函数,该函数接受两个参数:asc文件路径和csv文件路径。函数首先读取asc文件的内容,并进行逐行处理。对于每一行,首先检查是否为空行或注释行,然后使用空格作为分隔符将每个数据元素划分为一个列表。如果需要对数据元素进行特定处理,可以在代码的相应位置进行操作。最后,将处理后的数据写入csv文件中。 要使用这个文件转换工具,只需将要转换asc文件的路径和转换后的csv文件的路径作为参数传递给`convert_asc_to_csv`函数即可。转换完成后,会打印出"转换完成!"。 请注意,以上代码只是一个基本的文件转换示例,如果需要更复杂的转换逻辑或处理,您可能需要进行相应的修改。 ### 回答3: Python是一种功能强大而简单易用的编程语言,是一个理想的选择来编写文件转换工具。下面是一个使用Python编写的asc文件转换csv文件的例子。 ```python import csv def convert_asc_to_csv(asc_file, csv_file): with open(asc_file, 'r') as file: lines = file.readlines() data = [] for line in lines: line_data = line.strip().split(' ') data.append(line_data) with open(csv_file, 'w', newline='') as file: writer = csv.writer(file) writer.writerows(data) print("文件转换完成!") asc_file = "input.asc" csv_file = "output.csv" convert_asc_to_csv(asc_file, csv_file) ``` 解释: 1. 首先,我们导入了csv模块来读写csv文件。 2. 然后,我们定义了一个`convert_asc_to_csv`函数,该函数接受一个asc文件和一个csv文件作为输入参数。 3. 在函数内部,我们使用`with open`语句以只读模式打开asc文件,并按行读取其中的内容。 4. 接下来,我们创建一个空的`data`列表来存储每一行的数据。 5. 我们遍历每一行,使用`strip`方法去除空格和换行符,然后使用`split`方法根据空格将每一行切分成一个列表,并将其添加到`data`列表中。 6. 然后,我们使用`with open`语句以写入模式打开csv文件,并使用`csv.writer`创建一个写入器。 7. 最后,我们使用`writerows`方法将`data`列表中的数据写入csv文件中。 8. 最后,我们打印出"文件转换完成!"的提示信息。 使用这段代码,你可以将asc文件转换csv文件。简单运行这个Python脚本,输入asc文件的路径和csv文件的路径,即可完成转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值