如何使用Python在循环中按列填充CSV列?

时间:2012-05-18 16:04:39

标签: python loops csv

已解决:我的一位朋友帮我添加了代码,该代码获取输出的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(),如示例here,但我不完全确定如何实现它。然后我将设置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()';我正在循环使用类似名称的文件,但这对我的问题并不重要。

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

1 个答案:

答案 0 :(得分:0)

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

combined = map(None, list_1, list_2)

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