首先让我分享我现有的工作代码。此代码从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()';我正在循环使用类似名称的文件,但这对我的问题并不重要。
我非常感谢任何人都能给我的帮助!如果有任何问题,我会尽快解决这些问题。
答案 0 :(得分:0)
跟踪两个列表中的两组值,然后执行...
combined = map(None, list_1, list_2)
然后将组合列表输出到csv。