2016-12-11 3 views
-2

я хочу иметь такую ​​формупреобразования текстового файла в список неупомянута с помощью питона

[(1, 'A'), (1, 'd'), (1, 'e'), (1, 'l'), (1, ' '), (1, 'a'), (1, 'n'), (1, 'd'), (1, ' '), (1, 'm'), (1, 'o'), (1, 'h'), (1, 'a'), (2, 'm'), (1, 'e'), (1, 'd')] 

, но я получил эту

["(1, 'A')", "(1, 'd')", "(1, 'e')", "(1, 'l')", "(1, ' ')", "(1, 'a')", "(1, 'n')", "(1, 'd')", "(1, ' ')", "(1, 'm')", "(1, 'o')", "(1, 'h')", "(1, 'a')", "(2, 'm')", "(1, 'e')", "(1, 'd')"] 

и вот мой код

def openRLEFile(): 
    file = askopenfile(parent=root,title='Select a File') 
    global filename 
    filename = file.name 
    content = [x.strip('\n') for x in file] 
    tDecompressed = decodeRLE(content) 
    text.delete(0.0,END) 
    text.insert(0.0,tDecompressed) 
    file.close() 
+0

может быть, вы должны обрабатывать (суб) строки для их преобразования, как вы хотите то, как кортежи междунар и характер. .. Что вы пытались сделать? – Julien

+0

@JulienBernu Я застрял здесь приятель и понятия не имею, что делать, чтобы иметь эту форму списка –

+0

, вы создали этот файл? возможно, вы должны сделать это по-другому. – furas

ответ

1

Хотя eval(), предложенный 宏杰 李 работает удобно , часто не рекомендуется использовать его для целей безопасности.

Вместо этого вы могли бы обрабатывать вручную:

def my_process(x): 
    x = x[1:-1] # get rid of brackets 
    x = x.split(", ") 
    return (int(x[0]), x[1]) 

затем использовать:

content = [my_process(x.strip('\n')) for x in file] 
-2

использование Eval для преобразовать str в кортеж python, например:

eval("(1, ' ')") 

из:

(1, ' ') 

в вас случай:

content = [eval(x.strip('\n')) for x in file] 

, чтобы безопасность кода, рекомендуется использовать ast.literal_eval

import ast 
content = [ast.literal_eval(x.strip('\n')) for x in file] 
+2

Я бы предостерег от выполнения 'eval' от содержимого файлов и порекомендовал бы, что кто-нибудь, уезжающий сюда из Интернета будущего, очень серьезно смотрит на то, хотят ли они слепо исполнить все, что может быть представлено как код в файле , – erewok

+0

@erewok Извините, вы можете объяснить, почему это опасно? –

+0

файл может содержать код вируса, а 'eval' выполнит его ... – Julien