Python将数据写入文件

时间:2016-02-04 15:36:10

标签: python loops

我有一个关于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

有人在这里抓住我可能做错的事吗?

1 个答案:

答案 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()