Вызов файла .x (Linux) в Python и списках - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть следующий код:

# Initialisations

filename='/home/Admin/Desktop/Ncapa/i_capa.txt'
f = open(filename, 'r') 

ty = "r"
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()
f.readline()

d = float(f.readline())
D = float(f.readline())
BB = float(f.readline())
vrR = float(f.readline())
P = float(f.readline())
f0 = float(f.readline())
f1 = float(f.readline())

f.close()
os.system('ls -lt > ./capacite.x')
filename2 = '/home/Admin/Desktop/Ncapa/o_capa.txt'
f = open(filename2, 'r')

f.readline()
f.readline()
f.readline()
f.readline()
c0 = float(f.readline())

f.close()   

Мой первый вопрос (как вы уже, наверное, догадались, очень простой), есть ли способ уменьшить блок f.readline до чего-то простого?Меня всегда смущает, как читать текстовый файл, а затем брать значения из списка для присвоения переменным.В итоге я сделал это так, как мне нравится, как он работает, но мне не нравится внешний вид кода в целом.Я не использовал f.readlines (), так как запутался, как получить определенные значения из списка, который вы используете, используя его.

Мой второй вопрос, соответствующий строке:

os.system('ls -lt > ./capacite.x')

Есть ли способ выполнить .x файл в Python в Linux?Эта строка не вызывает каких-либо проблем, но я знаю, что она также не работает, поскольку этот файл создает файл o_capa.txt, который до этого момента мне приходилось заполнять вручную, чтобы протестировать остальную часть моей программы.

Любая помощь будет принята с благодарностью =)

Ответы [ 3 ]

2 голосов
/ 05 декабря 2011

Если вам известны имя и строка для каждой переменной, создайте словарь:

position = {12: 'd',
            13: 'D', ... }
data = {}
with open(filename, 'r') as f:
    for i, line in enumerate(f):
        if i in position:
            data[position[i]] = float(line.strip())

Затем используйте словарь data, как если бы это были переменные, например data['d'].

1 голос
/ 05 декабря 2011

Вы можете запустить readline в цикле, похожем на приведенный ниже

try:
    [fin.xreadlines().next() for i in xrange(0,<some_limit>)]
    d = float(fin.xreadlines().next())
except StopIteration:
    None
1 голос
/ 05 декабря 2011

почему вы не используете

f.readlines()
...