0

解決済み: 私の友人は、出力される csv ファイルを取得して単一の新しいファイルに結合するコードを追加するのを手伝ってくれました。同様の問題を抱えている他の誰かが将来見たい場合に備えて、週末の後にコードを追加します!

私の既存の作業コードを共有することから始めましょう。このコードは、csv ファイルから生データを取得し、そこから新しい csv ファイルを生成します。データは 2 つの列で構成され、1 つは電圧を表し、もう 1 つは電流を表します。電圧値が変化していない場合、現在の値は、定電圧を反映した名前を持つ新しい csv ファイルに送信されます。新しい安定した電圧に達すると、その電圧に対して別の csv が作成されます。ここにあります:

for x in range(1,6):
    input=open('signalnoise(%d).csv' %x,"r") # Opens raw data as readable
    v1 = 0
    first = True
    for row in csv.reader(input,delimiter='\t'):
            v2 = row[0]
            if v1==v2:
                voltage=float(v1)*1000
                if first:
                    print("Writing spectra file for " +str(voltage) + "mV")
                    first = False
                output=open('noisespectra(%d)' %x +str(voltage)+'mV.csv',"a")
                current = [row[1]]
                writer=csv.writer(output,delimiter='\t')
                writer.writerow(current)
            else:
                v1 = row[0]
                first = True

何らかの理由で、スクリプト全体の実行が完了するまで印刷コマンドがオフにならないように見えますが、正しいものが印刷されます。これは、スクリプトの実行中にコンピューターがハングアップした可能性があります。

これを変更して、多数のファイルを作成する代わりに、複数の列を持つ 1 つの出力ファイルだけを作成したいと考えています。各列の最初のエントリは電圧値で、その後にその電圧で記録されたすべての電流が続きます。これまでの私のアイデアは次のとおりですが、行き詰まっています:

for x in range(1,6):
    input=open('signalnoise(%d).csv' %x,"r") # Opens raw data as readable
    v1 = 0
    first = True
    for row in csv.reader(input,delimiter='\t'):
            v2 = row[0]
            if v1==v2:
                voltage=float(v1)*1000
                if first:
                    column = ['voltage']
                    print("Writing spectra file for " +str(voltage) + "mV")
                    first = False
                column=column+[row[1]] # Adds the current onto the column
                saved = True # Means that a column is being saved

             elif saved: # This is executed if there is a column waiting to be appended and the voltage has changed
#I get stuck here...

この時点で、ここの例のように何らかの方法で item.append() を使用する必要があると思いますが、実装方法が完全にはわかりません。次に、saved = False および v1 = row[0] を設定し、元の作業コードと同じ else ステートメントを使用して、次の反復で必要に応じて処理が進むようにします。

以下は、操作するための簡単なサンプル データです (ただし、私のものは実際にはタブで区切られています)。

.1, 1
.2, 2
.2, 2
.2, 2.1
.2, 2
.3, 3
.4, 4
.5, 5.1
.5, 5.2
.5, 5
.5, 5.1

私の作業コードはこれを使用して、「noisespectra(#)200.0mV.csv」と「noisespectra(#)500.0mV.csv」という名前の 2 つのファイルを提供します。これらは単一列「2,2,2.1,2」と「5.1」です。それぞれ5.2、5、5.1'。'200.0mV,2,2,2.1,2' と '500.0mV,5.1,5.2,5,5.1' の 2 つのカラムである 'noisespectra(#).csv' という名前の単一のファイルを作成するコードが欲しいです。一般に、特定の電圧は同じ数の電流を持たないため、特に最初の電圧が将来の電圧よりも対応する電流が少ない場合、item.append() 手法を使用する際にこれが潜在的な問題になる可能性があると思います。

「for x in range()」は無視してかまいません。似たような名前のファイルをループしていますが、それは私の問題にとって重要ではありません。

誰でも私にできる助けに感謝します!ご不明な点がございましたら、できる限り迅速に対応させていただきます。

4

1 に答える 1

0

2 つのリストで 2 つの値のセットを追跡し、次のことを行います。

combined = map(None, list_1, list_2)

そして、結合したリストを csv に出力します。

于 2012-05-18T20:24:20.113 に答える