0

已解决:我的一个朋友帮助我添加了代码,该代码获取输出的 csv 文件并将它们组合成一个新文件。我会在周末之后添加代码,以防以后有类似问题的其他人想看到它!

让我从分享我现有的工作代码开始。此代码从 csv 文件中获取一些原始数据并从中生成新的 csv 文件。数据由两列组成,一列代表电压,一列代表电流。如果电压值没有变化,则将当前值发送到一个新的 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

请注意,由于某种原因,在整个脚本运行完成之前,打印命令似乎不会关闭,但它会打印正确的内容。这可能只是我的电脑在脚本运行时挂起。

我想更改它,以便我只有一个包含多列的输出文件,而不是一堆文件。每列的第一个条目是电压值,然后是为该电压记录的所有电流。到目前为止,这是我的想法,但我被困住了:

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.1,2”和“5.1”,分别为 5.2、5、5.1'。我想要生成一个名为“noisespectra(#).csv”的单个文件的代码,该文件有两列,“200.0mV,2,2,2.1,2”和“500.0mV,5.1,5.2,5,5.1”。一般来说,一个特定的电压不会有相同数量的电流,我认为这可能是使用 item.append() 技术的潜在问题,特别是如果第一个电压的相应电流少于未来的电压。

随意忽略'for x in range()'; 我正在遍历具有相似名称的文件,但这对我的问题并不重要。

我非常感谢任何人可以给我的任何帮助!如果有任何问题,我会尽快解决。

4

1 回答 1

0

跟踪两个列表中的两组值,然后执行...

combined = map(None, list_1, list_2)

然后将组合列表输出到csv。

于 2012-05-18T20:24:20.113 回答