2016-06-09 108 views
0

我有.csv文件,我需要從中獲取一些信息。如果我打開這個文件,我可以看到兩行代碼,裏面寫着「data」和「notes」,我需要獲得這兩個變量的信息。Python:將字符串對象從文件解析爲python對象

當我打開.csv文件,它顯示了這些線:

data = 
[0,1,2,3,4,5,3,2,3,4,5,] 

notes = [{"text": "Hello", "position":(2,3)}, {"text": "Bye", "position":(4,5)}] 

要打開我使用的文件:

import csv 

class A() 
    def __init__(self): 
    #Some stuff in here 

    def get_data(self): 
    file = open(self.file_name, "r") 
    data = csv.reader(file, delimiter = "\t) 
    rows = [row for row in data] 

現在,讀取數據的信息,我只是寫:

for line in row[1][0]: 
     try: 
     value_list = int(line) 
     print value_list 

     except ValueError: 
     pass 

然後,我可以用這些值創建另一個列表並打印它。現在,我需要從「筆記」中讀取數據,就像你看到的那樣,它是一個以字典作爲元素的列表。我需要做的是讀取每個字典中的「位置」元素並打印出來。

這是我的代碼:

for notes in row[3][0]: 
    if notes["position"]: 
     print notes["position"] 

但是,這,使我這個錯誤: TypeError: string indices must be integers, not str

如何訪問每個字典的這些元素,然後打印呢?希望您能夠幫助我。

這是.csv文件,我從中試圖獲取信息。

enter image description here

+0

這似乎不是實際上是一個CSV文件 – Amndeep7

+0

這個問題是筆記是一個字符串不是一個字典 – Keatinge

+0

嗯,這是。只是在開始時它只有一列。在這些行之後,是一個常見的'.csv'文件。 –

回答

1

你可以改變你的代碼的最後一部分:

for note in eval(rows[3][0].strip("notes = ")): 
    if note["position"]: 
     print note["position"] 

如果你需要的位置是一個實際的元組,而不是一個字符串,您可以更改最後一行:

print tuple(note["position"]) 
+0

謝謝你的回答。是不是「行」列表?如果是,那麼'strip'會給我一個'語法錯誤'。不是嗎? –

+0

@PabloFlores - 它是,但行[3] [0]是一個字符串,這就是你正在運行的條。測試代碼,它的工作原理。 – Natsukane

+0

謝謝。你幫了我很多。 –