【问题标题】:Inserting column name headers into a Python list将列名标题插入 Python 列表
【发布时间】:2015-06-10 14:15:15
【问题描述】:

我正在尝试将列标题插入 Python 列表。我使用的 csv 文件没有列名,数据用逗号分隔。我正在尝试编写这个程序,这样我就不必每次在 ArcGIS 中制作每周地图时都将列名插入到 csv 文件中。如果需要,我还可以将 csv 转换为字典。无论哪种方式都可以。到目前为止,我有这段代码,它产生了一个可用的数据集。我知道如何按列名引用字典中的列。但同样的方法似乎不适用于将列名插入列位置。

import os
os.chdir('C:\Users\####\Desktop')
fileData = open('SOUTH_06_01_2015_SECFILE.CSV','rb')

def dataHeader():
    headerLine = fileData.readline()
    valueList = headerLine.split(',')
    yield valueList

def dataBody():
    for line in fileData.readlines():
        segmentLine = line.split(',')
        yield segmentLine[0:6]

def dataPrinter():
    gen1 = dataHeader()
    gen2 = dataBody()
    print'\n'
    for row in gen2:
        print row
dataPrinter()

【问题讨论】:

  • 是的,在我使用我发布的代码时,我没有打印 gen1。我只是在使用 gen2 的输出。
  • 那么您要做的是编写一个程序,从用户那里获取名称并将它们设置为您的 csv 文件的标题?
  • 是的,这就是我想做的事情。只打印出 gen1 和 gen2 只打印数据集的第一行,而数据集的其余部分在下面,没有对列的任何引用。
  • 所以基本上,此时仅调用 headerLine 几乎没有用。重命名 headerLine 中的列会从数据集主体中删除该数据,这是不好的。当然,我可以将 headerLine 转换为列名,但是那行数据会丢失。
  • 对不起,我的意思是 valueList 不是 headerLine/

标签: python list csv dictionary


【解决方案1】:

假设用户插入了列名,而 csv 文件没有列名,这应该可以完成。

def dataHeader(columns_no):
    columns = []
    for i in range(columns_no):
        text = raw_input("Enter column #%d name> " % i)
        columns.append(text)
    return columns


def dataBody(columns_no):
    segmentLines = []
    for line in fileData.readlines():
        segmentLine = line.split(',')
        segmentLines.append(segmentLine[:columns_no])
    return segmentLines


def dataPrinter():
    columns_no = 6
    gen1 = dataHeader(columns_no)
    gen2 = dataBody(columns_no)
    print ','.join(gen1)
    for row in gen2:
        print ','.join(row)


dataPrinter()

【讨论】:

  • 下面是运行上述代码的输出:
  • 回溯(最近一次调用最后):文件“C:/Users/####/Desktop/column_namer_csv_06_10_2015.py”,第 27 行,在 dataPrinter() 文件“C:/用户/####/Desktop/column_namer_csv_06_10_2015.py",第 24 行,在 dataPrinter print ','.join(gen1) TypeError
  • 我确实喜欢列名的原始输入,但我认为可能需要做的是创建标题,然后根据每个由字符分隔的方式将标题压缩到正文,例如逗号?
  • 我修复了你遇到的错误;您想在一行中插入标题。比如:“first-name, last-name, zipcode”而不是“first-name”“lastname”“zipcode”
  • 我忘记在headerBody 中返回columns
猜你喜欢
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 2013-04-19
  • 1970-01-01
  • 2014-11-27
  • 2018-03-25
相关资源
最近更新 更多