我有一个关于python编码的快速问题:我有一些文件有两列(波长和通量),每个文件都是在不同的日期拍摄的。所以我有一个文件(original.txt),其中一列中的文件名和另一列中的日期。现在,我想读取文件,并在"波长和通量"中添加第三列日期。文件。
所以我从original.txt开始,它有:
> data[-1,] / data[-nrow(data), ] - 1
c.1..2..4..15. c.2..1..5..8.
2 1.00 -0.5
3 1.00 4.0
4 2.75 0.6
> exp(diff(log(as.matrix(data)))) - 1
c.1..2..4..15. c.2..1..5..8.
[1,] 1.00 -0.5
[2,] 1.00 4.0
[3,] 2.75 0.6
> library(zoo)
> diff(as.zoo(data), arithmetic = FALSE) - 1
c.1..2..4..15. c.2..1..5..8.
2 1.00 -0.5
3 1.00 4.0
4 2.75 0.6
所有这些file_a.txt 23
file_b.txt 26
file_c.txt 30
都有两列波长与通量,但我想最终得到一个包含波长,通量和日期的文件,例如file_{}.txt
我应该有:
file_a.txt
我尝试了这个,但是我的代码(下面)只写了5550.0 200 23
5551.0 123 23
5552.0 109 23
....
中第一个文件中读取的波长和通量值(即来自original.txt
的那些)。
file_a.txt
有人在这里抓住我可能做错的事吗?
答案 0 :(得分:0)
好的,你还有几件事情要做。首先,您通过内置file
命名列表,这可能会导致意外行为,因此请避免这种情况。其次,你的循环不同步并创建三个输出文件。我已经将它浓缩为逐行写入文件,然后在最后关闭文件。这使得维护原始代码结构变得非常困难,因为通过单独执行所有任务使其变得更加复杂。我认为这可以提供您的预期输出。
编辑:如果您想要单个输出文件或多个输出文件,我无法从原始代码输出中正确解密。所以我根据您的原始版本添加了两者的代码。
file_names = [] # Renamed
MJD = []
wavelength = []
flux = []
f = open("original.txt","r")
for line in f:
file_names.append(str(line.split()[0]))
MJD.append(float(line.split()[1]))
f.close()
# FOR MULTIPLE OUTPUT FILES
for x in range(len(file_names)):
input_file = open('%s' % file_names[x])
date = MJD[x]
output_file = open(file_names[x].replace('.txt', '') + "_t.txt", 'w')
for line in input_file:
wavelength = float(line.split()[0])
flux = float(line.split()[1])
output_file.write("%0.3f %0.3f %0.3f\n" % (wavelength,flux,date))
input_file.close()
output_file.close()
# FOR A SINGLE OUTPUT FILE
main_output = open('outputs.txt', 'w')
for x in range(len(file_names)):
input_file = open('%s' % file_names[x])
date = MJD[x]
for line in input_file:
wavelength = float(line.split()[0])
flux = float(line.split()[1])
main_output.write("%0.3f %0.3f %0.3f\n" % (wavelength,flux,date))
input_file.close()
main_output.close()