2016-06-09 2 views
0

У меня есть файл .csv, и мне нужно получить некоторую информацию от него. Если я открою файл, я могу увидеть две строки в нем, в которых говорится «данные» и «заметки», и мне нужно получить информацию, которую имеют эти две переменные.Python: Parse строковые объекты в объекты 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 

И с этим я могу создать другой список с этими значениями и распечатать его. Теперь мне нужно прочитать данные из «заметок», как вы можете видеть, это список со словарями в качестве элементов. Что мне нужно сделать, так это прочитать элемент «position» внутри каждого словаря и распечатать его.

Это код, который у меня есть:

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

Спасибо. Вы мне очень помогли. –

Смежные вопросы