0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pyedflibでEDFファイルを上書きする

Last updated at Posted at 2022-05-13

はじめに

pyedflibの使い方やedfファイルの読み込み方については既に@tchkwkzkさんの記事があるためそちらを参照ください。

EDFファイルの上書き

EDFファイルに書き込むこと自体はpyedflib.EdfWriterで可能ですが、EdfWriterは元のファイルを初期化してから書き込むため上書きできません。
対策としてedfファイルを複製し、複製したファイルに上書きします。

import pyedflib
#-----------------
def get_all_signals(edf:pyedflib.EdfReader):
    """
    edfファイルから全チャンネルの波形を取得して返します。
    """
    ewavs = []
    for idx,_ in enumerate(edf.getSignalLabels()):
        ewavs.append(edf.readSignal(idx))
    return ewavs

def copy(redf:pyedflib.EdfReader,copy_path:str,copied_func = None):
    """
    redfの内容をコピーパスへコピーします。
    copied_funcの第一引数にredf,第二引数にwedfを返します。
    """
    ch = len(redf.getSignalHeaders())
    with pyedflib.EdfWriter(copy_path,ch) as wedf:
        header = redf.getHeader()
        #header["birthdate"] = "" 元のedfファイルが日付フォーマットのルールに従っていない場合フォーマットエラーが出るため birthdateを空文字に置き換えて回避します。
        annos = redf.readAnnotations()
        wedf.setHeader(header)
        wedf.setSignalHeaders(redf.getSignalHeaders())
        wedf.writeSamples(get_all_signals(redf))
        for i,_ in enumerate(annos[0]):
            wedf.writeAnnotation(annos[0][i],annos[1][i],annos[2][i])
        if not (copied_func is None):
            copied_func(redf,wedf)
        wedf.close()
    return ch

ヘッダー情報のbirthdateが適当に設定されているファイルだとエラーが出る可能性があります。その場合コメントアウトしている部分を利用してください。

使うとき(例:アノテーションを追加する)

EDF_PATH = "*****"
OUT_EDF_PATH = "*****"
edf_reader = pyedflib.EdfReader(EDF_PATH)
def copied_func(redf:pyedflib.EdfReader,wedf:pyedflib.EdfWriter):
    wedf.writeAnnotation(ot,-1,"action") #アノテーションを設定

copy(edf_reader,OUT_EDF_PATH,copied_func)

おわりに

もしコピーできていない項目があればコメントで教えていただけると幸いです。

また、pyedflibの使い方をまとめてくださった@tchkwkzkさんに感謝します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?