簡體   English   中英

使CSV文件更容易在Python中使用標題/列名進行修改/導航?

[英]Making CSV files easier to modify/navigate within Python using headers / column names?

所以,

我有一個CSV文件,其中包含不同數量的列, 我認為這意味着我在下面嘗試過的制作標頭的傳統方法將無法正常工作...

我想要一些標題的原因是,使用帶有100多個列的csv文件並執行rPol = math.exp((((-1.2359386)+float(row[48])*(row[33])+row[29]+row[13]+row[97]/row[50])))

嘗試記住每一行的標識是一件很麻煩的事,如果我可以做以下事情會更容易: rPol = math.exp((((-1.2359386)+float(depolscore)*(master_num)+ripen+offset_score+full/epilic)))

import csv

reader = csv.reader(open("test.csv"), delimiter=",")
headers = {"data", "title", "here", "testing", "stackoverflow"}
csv.DictWriter(reader, headers)
reader.writeheader()
for row in reader:
    print testing

我該如何在不執行以下操作的情況下為特定的列提供標題:

for row in reader:
    # put the columns into variables...
    data = row[0]
    title = row[1]
    here = row[2]
    testing = row[3]
    stackoverflow = row[4]

    # Do math
    score = data * here / stackoverflow
    # Print for user sake
    print score
    # Change the testing value
    testing = testing + (score - title)

    # Put values back into the reader object?
    row[0] = data
    row[1] = title
    row[2] = here
    row[3] = testing
    row[4] = stackoverflow

有任何想法嗎?

您可以嘗試使用namedtuple 它是元組的子類,可通過名稱的可迭代訪問輕松地創建字段。 您應該知道的唯一陷阱是,像元組一樣,namedtuple是不可變的,因此您必須將新元組存儲在某個地方:

headers = ["data", "title", "here", "testing", "stackoverflow"]
Row = namedtuple('Row', headers)
for raw_row in reader:
    row = Row._make(raw_row)

    # Do math
    score = row.data * row.here / stackoverflow
    # Print for user sake
    print score
    # Change the testing value
    new_testing = row.testing + (score - row.title)
    new_row = row._replace(testing=new_testing)

    # Do something with new_row...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM