簡體   English   中英

使用Python從CSV文件中提取變量名和數據

[英]Extracting variable names and data from csv file using Python

我有一個csv文件,該文件的每一行均以行名格式化,后跟11條數據。 這是一條線的示例。

CW1,0,-0.38,2.04,1.34,0.76,1.07,0.98,0.81,0.92,0.70,0.64

總共有12行,每行都有唯一的名稱和數據。

我想做的是從每一行中提取第一個單元格,並用它來命名相應的數據,或者作為等於包含該行數據的列表的變量,或者作為字典,以第一個單元格為鍵。

我是輸入文件的新手,所以我最了解的是使用文檔中的庫存解決方案閱讀文件

import csv

path = r'data.csv'

with open(path,'rb') as csvFile:
    reader = csv.reader(csvFile,delimiter=' ')
    for row in reader:
        print(row[0])

我無法弄清楚如何將每一行分配給一個新變量,尤其是當我不確定變量名將是什么時(這是因為csv文件將由我自己以外的用戶創建)。

該數據的目的地是我編寫的工具。 它接受列表作為輸入,例如...

CW1 = [0,-0.38,2.04,1.34,0.76,1.07,0.98,0.81,0.92,0.70,0.64]

因此這將是理想的最終解決方案。 如果更容易並且以其他格式讀取文件的輸出被認為更好,我當然可以重寫我的工具以使用該數據類型。

您需要對這類事物(動態變量)使用dict

import csv

path = r'data.csv'

data = {}

with open(path,'rb') as csvFile:
    reader = csv.reader(csvFile,delimiter=' ')
    for row in reader:
        data[row[0]] = row[1:]

dicts對於動態變量特別有用,並且是存儲此類內容的最佳方法。 訪問您只需要使用:

data['CW1']

該解決方案還意味着,如果您在其中添加了其他帶有新名稱的行,則無需進行任何更改。

如果您迫切希望將變量名放在global namespace而不是在dict ,請使用exec (注意,如果從外部源輸入的任何這些用途,使用EXEC / EVAL非常危險( rm *級),因此請確保所有輸入由您自己控制和理解)。

with open(path,'rb') as csvFile:
    reader = csv.reader(csvFile,delimiter=' ')
    for row in reader:
        exec("{} = {}".format(row[0], row[1:])

正如Scironic在回答中所說的那樣,最好對此類事情使用dict

但是,請注意dict對象沒有任何“順序”-如果使用一個,則行的順序將丟失。 如果這是一個問題,則可以改用OrderedDict (聽起來就是這樣:“記住”其內容順序的dict ):

import csv
from collections import OrderedDict as od

data = od() # ordered dict object remembers the order in the csv file

with open(path,'rb') as csvFile:
    reader = csv.reader(csvFile, delimiter = ' ')
    for row in reader:
        data[row[0]] = row[1:] # Slice the row up into 0 (first item) and 1: (remaining)

現在,如果您遍歷data對象,其內容將與csv文件中的順序相同:

for d in data.values():
    myspecialtool(*d)

在python中,您可以使用切片: row[1:]將包含除第一個元素以外的行,因此您可以執行以下操作:

>>> d={}
>>> with open("f") as f:
...  c = csv.reader(f, delimiter=',')
...  for r in c:
...    d[r[0]]=map(int,r[1:])
...
>>> d
{'var1': [1, 3, 1], 'var2': [3, 0, -1]}

關於變量變量,請檢查如何在Python中執行變量變量? 如何在Python中獲取變量名稱作為字符串? 我會堅持字典。

使用適當的csv庫的替代方法如下:

path = r'data.csv'
csvRows = open(path, "r").readlines()

dataRows = [[float(col) for col in row.rstrip("\n").split(",")[1:]] for row in csvRows]

for dataRow in dataRows:        # Where dataRow is a list of numbers
    print dataRow

然后,您可以在print語句所在的位置調用函數。

這將讀取整個文件,並生成帶有尾隨換行符的行列表。 然后,它刪除每個換行符並將每一行拆分為一個字符串列表。 它跳過初始列,並為每個條目調用float()。 產生列表列表。 這取決於第一列的重要性嗎?

暫無
暫無

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

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