7

Eprime は、次のような .txt ファイルを出力します。

*** ヘッダーの開始 ***
バージョン持続: 1
レベル名: セッション
件名: 7
セッション: 1
ランダムシード: -1983293234
グループ: 1
Display.RefreshRate: 59.654
*** ヘッダー エンド ***
    レベル2
    *** ログフレーム開始 ***
    MeansEffectBias: 7
    手続き:trialProc
    アイテムID: 7
    バイアス1回答: 1
    *** ログフレーム終了 ***
    レベル2
    *** ログフレーム開始 ***
    平均効果バイアス: 2
    手続き:trialProc
    アイテムID: 2
    バイアス1回答: 0

これを解析して .csv ファイルに書き込みたいのですが、いくつかの行が削除されています。

コロンの前に表示されるテキストをキー、コロンの後のテキストを値とする辞書を作成しようとしました。

{件名: [7, 7]、bias1Answer: [1, 0]、itemID: [7, 2]}
def load_data(ファイル名):
    データ = {}
    eprime = open(ファイル名, 'r')
    eprime の行の場合:
        行 = re.sub('\s+', ' ', line).strip().split(':')
        試す:
            データ[行[0]] += 行[1]
        KeyError を除く:
            データ[行[0]] = 行[1]
    eprime.close()
    データを返す
for line in open(fileName, 'r'):
    ':' 行の場合:
        行 = line.strip().split(':')
        fullDict[行[0]] = 行[1]
fullDictを印刷する

以下のスクリプトはどちらもガベージを生成します。

{'\x00\t\x00M\x00e\x00a\x00n\x00s\x00E\x00f\x00f\x00e\x00c\x00t\x00B\x00i\x00a\x00s\x00': '\x00\x005\x00\r\ x00', '\x00\t\x00B\x00i\x00a\x00s\x002\x00Q\x00.\x00D\x00u\x00r\x00a\x00t\x00i\x00o\x00n\x00E\x00r\x00r\x00o\x00r\ x00': '\x00 \x00-\x009\x009\x009\x009\x009\x009\x00\r\x00'

辞書を設定できれば、次のような csv ファイルに書き込むことができます!!:

件名 itemID ... bias1Answer
  7 7 1
  7 2 0
4

4 に答える 4

0

2 番目のアプローチは機能しますが、各辞書キーの値はリストにする必要があります。現在、ディクショナリのキーごとに 1 つの値のみを保存しているため、最後の値のみが保存されます。各キーの値がリストになるようにコードを変更できます。以下のコードは同じことを達成します:

for line in open(fileName, 'r'):
    if ':' in line:
        row = line.strip().split(':')
        # Use row[0] as a key, initiate its value
        # to be a list and add row[1] to the list. 
        # In case already a key 'row[0]'
        # exists append row[1] to the existing value list
        fullDict.setdefault(row[0],[]).append(row[1])
print fullDict 
于 2013-06-12T03:54:29.793 に答える
0

Eprime の出力は utf-16 でエンコードされているようです。

>>> print '\x00\t\x00M\x00e\x00a\x00n\x00s\x00E\x00f\x00f\x00e\x00c\x00t\x00B\x00i\x00a\x00s\x00'.decode('utf-16-be')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/encodings/utf_16_be.py", line 16, in decode
    return codecs.utf_16_be_decode(input, errors, True)
UnicodeDecodeError: 'utf16' codec can't decode byte 0x00 in position 32: truncated data
>>> print '\x00\t\x00M\x00e\x00a\x00n\x00s\x00E\x00f\x00f\x00e\x00c\x00t\x00B\x00i\x00a\x00s\x00'.decode('utf-16-be', 'ignore')
    MeansEffectBias
于 2013-06-12T04:20:25.560 に答える
0

これは古い質問であることはわかっているので、長い間解決してきたかもしれませんが、必要以上に複雑な方法でこれに取り組んでいると思います。他の誰かが同じ問題を抱えていて、これを見つけた場合に備えて、返信すると思います。

ソフトウェア キーを持っていないためにこの方法を使用している場合は、eprime のE-MergeおよびE-DataAidプログラムがキーを必要としないことを知っておくと役立つ場合があります。ビルド ファイルを編集するためのキーのみが必要です。.txt ファイルを提供した人は、おそらくこれらのプログラムのインストール ディスクを持っているはずです。そうでない場合は、PST Web サイトで入手できます (アカウントを作成するにはシリアル コードが必要だと思いますが、確実ではありません)。

Eprime は通常.edat、例を投稿したテキスト ファイルの内容と一致するファイルを作成します。ただし、eprime がクラッシュした場合、edat ファイルを取得できず、.txt. 幸いなことに、ファイルから edat ファイルを生成でき.txtます。

この問題へのアプローチ方法は次のとおりです。

  1. 利用可能な edat ファイルがない場合は、まずE-DataAidを使用してファイルを回復します。

  2. 次に、複数の参加者がいると仮定すると、E-Mergeを使用して、このタスクを完了したすべての参加者のすべての edat ファイルを一緒にマージできます。

  3. マージされたファイルを開きます。ファイルの量によっては、少し混沌として見えるかもしれません。Go to tools->Arrange columnsにアクセスできます。これにより、すべての変数のリストが表示されます。

  4. 必要な変数のみが右側のボックスに表示されるように調整します。ヒットOK。

  5. 次に、csvとしてエクスポートできる最終目標に似たものが必要です。

プログラムに多くの手順がある場合、この時点で、起動情報だけを含む行とNULL、変数または関心のある場所にある可能性があります。ツール - >フィルターに移動し、フィルターを作成してこれらの行を削除することで、これを修正できます。

于 2014-01-28T18:50:12.593 に答える