【问题标题】:formatting python output file in such a way that columns can be accessed later格式化python输出文件,以便以后可以访问列
【发布时间】:2013-07-10 14:47:48
【问题描述】:

在我正在处理的程序中,我正在从一个看起来像这样的 .xls 文件中读取数据

2012-SEP-27     04:35:00        0.035173        0.019666        0.001566        -0.002356       0.028054  0.009819        -9999.000000    0.036353        0.021943        0.003582        -0.0006520.025411 0.009548        -9999.000000    0.035703        0.019268        0.003582        -0.0005340.040426 0.010700        -9999.000000    56.904729       95.722267       7.827207

将其分解为列,对数字进行一些筛选(这包括将某些列组合到“过滤器”中),然后尝试将其写回另一个 .xls 文件。 我可以将其写入文件,并且输出文件 看起来 与输入文件相同,但是当我尝试访问单独的列时,我要么不能(它将整个内容视为一列)或者我只能逐个字符地访问它。

我尝试了多种方式格式化输出,包括:

AA = ('{0}     {1}     {2}     {3}     {4}     {5}     {6}     {7}     {8}     {9}     {10}    {11}    {12}    {13}    {14}    {15}    {16}    {17}    {18}    {19}    {20}    {21}    {22}    {23}    {24}    {25}'.format(date, time, filter1[0], filter1[1], filter1[2], filter2[0], filter2[1], filter2[2], filter3[0], filter3[1], filter3[2], filter4[0], filter4[1], filter4[2], filter5[0], filter5[1], filter5[2], filter6[0], filter6[1], filter6[2], filter7[0], filter7[1], filter7[2], LZA, SZA, LAM) + '\n')

AA = [date, time, float(filter1[0]), float(filter1[1]), float(filter1[2]), filter2[0], filter2[1], filter2[2], filter3[0], filter3[1], filter3[2], filter4[0], filter4[1], filter4[2], filter5[0], filter5[1], filter5[2], filter6[0], filter6[1],filter6[2], filter7[0], filter7[1],filter7[2],LZA, SZA, LAM]


AA = [(date, time, filter1[0], filter1[1], filter1[2], filter2[0], filter2[1], filter2[2], filter3[0], filter3[1], filter3[2], filter4[0], filter4[1], filter4[2], filter5[0], filter5[1], filter5[2], filter6[0], filter6[1], filter6[2], filter7[0], filter7[1], filter7[2], LZA, SZA, LAM)]

我正在寻找一些关于将数据写入文件的一般帮助,以便它可以通过列访问,我正在处理的代码很难简洁地解释,所以一般的例子很好。我是 python 新手,感谢您的帮助和耐心

编辑

                writer = csv.writer(outputfile, delimiter = '\t')
                row = [date, time]
                row.extend(map(float, filter1))
                for filter in (filter2, filter3, filter4, filter5, filter6, filter7):
                        row.extend(filter)
                row.extend([LZA, SZA, LAM])
                writer.writerow(row)

给我一​​个看起来像的输出

2012-SEP-27     04:35:00        -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -.0      56.904729       95.722267       "7.827207
"
2012-SEP-27     04:39:00        -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0 0.0      -9999.0 56.007862       96.708467       "1.784808
"
2012-SEP-27     04:43:00        0.036885        0.038065        0.047741        0.021099        0.0      0.035384        0.034978        0.045806        0.019952        0.013064        0.021955
"
2012-SEP-27     04:47:00        0.038996        0.039075        0.04026 0.020357        0.012688 .036156 0.033027        0.011406        0.011693        0.011979        -9999.0 -9999.0 -9999.0 5
"
2012-SEP-27     04:51:00        -9999.0 -9999.0 -9999.0 0.019505        0.016133        0.018253 146     0.043547        0.012732        0.014486        0.015731        -9999.0 -9999.0 -9999.0 5
"

我正在尝试使用

访问每一列
from __future__ import division
import csv
v = open("Pt_2_Test_Data.csv", 'wb') 

with open("outputfile.csv", 'rb') as w:
        reader = csv.reader(w, delimiter = '\t', quotechar = '|')

        for row in w:
                columns = row.split(',')
                date = columns[0]
                time = columns[1]

打印日期会给我日期,但是除 column[0] 之外的任何东西都会给出这个错误

    time = columns[1]
IndexError: list index out of range

【问题讨论】:

  • 你使用的是 Python 2 还是 Python 3?
  • 你考虑过安装 Pandas 吗?我经常将它与 iPython HTML 笔记本一起用于表格数据,事实证明它对于切片和切块数据很有用。它还提供了一些简单的函数(例如.to_csv('filename.csv')),以便将数据轻松写入 CSV 格式。如果您需要开始使用它的帮助,请告诉我。

标签: python file-io output xls multiple-columns


【解决方案1】:

使用csv 模块并写入制表符 分隔值:

import csv

with open('outputfile.csv', 'wb') as outputfile:
    writer = csv.writer(outputfile, delimiter='\t')
    row = [date, time]
    row.extend(map(float, filter2))
    for filter in (filter2, filter3, filter4, filter5, filter6, filter7):
        row.extend(filter)
    row.extend([LZA, SZA, LAM])
    writer.writerow(row)

您的输入文件很可能也使用了制表符分隔的列,而不是多个空格。

【讨论】:

  • 如何让它为每一行迭代?我尝试在最后一行之前添加“for row in w:”(其中 w = 数据文件),但它逐个字符地打印出所有内容
  • writer = 行之外的所有内容当然应该按行完成;您的旧代码大概处理了w 文件中的每行数据?这一切都归结为您为输出文件中的每一行创建一个列列表以传递给writer.writerow()
  • 知道了,我愚蠢地将“with open(.....)”行放在循环内,所以每次都被重写。再次感谢
  • 所以现在如果我想访问另一段代码(从 outputfile.csv 中)中的一列数据,我该怎么做呢?
  • 再次,当我查看文件时,它看起来格式正确,但是当我尝试使用 line 或 row.split("\t") 按另一个代码中的列访问它时,我可以t.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多