2016-06-09 109 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

谢谢。你帮了我很多。 –