读取txt内的数据并转换,添加至csv文件制定列中

#脑电信号处理

#文件格式处理

我的txt文件格式如下,是事件和记录。但是脑电信号存储文件csv中的markervalueint列并没有。

将事件放入其文件之中会在后续脑电信号处理(截断处理)之中更加方便

其中还含有了对于时间的操作

第一次尝试代码:

import pandas as pd
import datetime
csv_file = '/Volumes/MYU2//10.10.2.4_EPOCFLEX_240095_2024.10.10T21.05.40+08.00.md.csv'
txt_file = '/Volumes/MYU2/实验数据/打点数据/keyboard_events2.4.txt'
csv_data = pd.read_csv(csv_file, skiprows=1)

with open(txt_file, 'r') as f:
    txt_data = f.readlines()

starttime = '21:05:40.148'
starttime = datetime.datetime.strptime(starttime,'%H:%M:%S.%f')
list = [1.0,2.0]
idxn = []
a=0
#这里是先把time从上面图片的格式之中给牵出来
for line in txt_data:
    parts = line.strip().split(',')
    all_time = parts[1]
    time = all_time.split()[1]
    time = datetime.datetime.strptime(time, "%H:%M:%S.%f")
#如果打印出来会发现还是有年月日,不过变成了1900-1-1
    #print((time))
    offtime = round((time - starttime).total_seconds(),6)
    #print(offtime)

    idx = int(offtime * 128)+10
    idxn.append(idx)
    #print(idx)
    a=a+1
print(idxn)

# 根据 idxn 列表逐一修改 MarkerValueInt 的值
for i, idx in enumerate(idxn):
    value = list[i % 2]  # 切换标记值
    csv_data.at[idx, 'MarkerValueInt'] = value
# 保存更新后的 CSV 文件
csv_data.to_csv(csv_file, index=False)
print(f"已保存更新后的 CSV 文件到:{csv_file}")
for idx, marker_value in enumerate(csv_data['MarkerValueInt']):
    if marker_value == 1 or marker_value ==2:
        print(f"{idx}  {marker_value}")

上面代码运行之后发现修改后的文件少了很多列,而且标记1、2也没有正确。应该是不能为同一个文件修改的问题(缓存问题),同时试了将.at换为.loc也是一样。并且这个代码运行很慢。

参考csv批量列修改文章后批量修改csv文件列数据,并存储为新csv文件_csv文件怎么修改数据-优快云博客后,得到下面代码:
 

import pandas as pd
import datetime
csv_file = '/Volumes/MYU2//10.10.2.4_EPOCFLEX_240095_2024.10.10T21.05.40+08.00.md.csv'
txt_file = '/Volumes/MYU2/实验数据/打点数据/keyboard_events2.4.txt'
out_file = '/Users/kzxu/Desktop/10.10.2.4.md.csv'
csv_data = pd.read_csv(csv_file, skiprows=1)

with open(txt_file, 'r') as f:
    txt_data = f.readlines()

starttime = '21:05:40.148'
starttime = datetime.datetime.strptime(starttime,'%H:%M:%S.%f')
list = [1.0,2.0]
idxn = []
#a=0

for line in txt_data:
    parts = line.strip().split(',')
    all_time = parts[1]
    time = all_time.split()[1]
    time = datetime.datetime.strptime(time, "%H:%M:%S.%f")
    #print((time))
    offtime = round((time - starttime).total_seconds(),6)
    #print(offtime)
    idx = int(offtime * 128)+10
    idxn.append(idx)
    #print(idx)
    #a=a+1
print(idxn)
input_mumeric = csv_data['MarkerValueInt']
print(input_mumeric)
a=0
for i in idxn:
    if a%2 == 0:
        input_mumeric.at[i] = list[0]
    else:
        input_mumeric.at[i] = list[1]
    a=a+1
csv_data.to_csv(out_file, index=False)

不同的就是:将csv文件输出不再是原文件,而是其他地方其他名字;并且.at的使用上是先将MarkerValueInt列单独一个指定,替代原有的csv_data.at[idx, 'MarkerValueInt'] = value

其他需要注意的:
txt文件里面行与行之间不能有空行,不然在划分部分的时候就会出错;还有一个就是最后的地方不能留空白行超过一行,也是上述原因,两个空白行在for循环语句里面会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值