2016-06-06 4 views
0

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

<KeyPlat> = 1228.3 
<KeyTran> = 690.3 
<KeyTotal> = 1918.6 
<KavPlat> = 2996.3 
<KavTran> = 3811.4 
<KavTotal> = 6807.7 

Я пытаюсь использовать эти данные для записи в новый текстовый файл с ожидаемым выходом, как это:

Table 1 
Platform 1228.3 
Transfers 690.3 

Table 2 
Platform 1918.6 
Transfers 2996.3 
Total  6807.7 

Я пытаюсь просто вывести цифры и сохранить их для записи в новый файл. Метод, который я использовал, заключался в поиске ключевых символов, и когда я начинаю вытягивать цифры. Я не уверен, куда идти с этого момента.

def foo(): 
     # Open write and read files. 
     f1 = open('text.txt', 'r') 
     f2 = open('to.txt', 'w') 


     f2.write("Table 1"\n) 
     f2.write("Platform\t") 
     #Start of digit information 
     searchquery = '=' 
     #End of digits 
     searchquery2 = '<' 
     for line in f1: 
      for letter in line: 
        if letter is not isdigit(): 

        if letter == searchquery: 

        if letter == searchquery2: 
+0

Почему 'Total 1918.6' отсутствует в первой таблице строфе? – Kaz

ответ

1

Вместо того, чтобы проверить посимвольно я предложил бы использовать ключевое слово in на линии. Затем вы можете использовать split, чтобы легко сгенерировать список слов, которые были между пробелами, например, ["<KeyPlat>", "=", "1228.3"] - результат "<KeyPlat> = 1228.3".split(' '). И тогда вам просто нужно форматировать свой выход, как вы предпочитаете. Я предпочитаю формат.

Я использовал lines в качестве короткого замыкания. Вместо этого вы должны использовать свой файл.

lines = ["<KeyPlat> = 1228.3", "<KeyTran> = 690.3", "<KeyTotal> = 1918.6"] 

f1 = open("testtable.txt", "w") 

for line in lines: 
    values = line.split(' ') 
    if "KeyPlat" in values[0]: 
     print("{0:10s}{1:10s}".format("Platform", values[2]), file=f1) 
    elif "KeyTran" in values[0]: 
     print("{0:10s}{1:10s}".format("Transfers", values[2]), file=f1) 
    elif "KeyTotal" in values[0]: 
     print("{0:10s}{1:10s}".format("Total", values[2]), file=f1) 

f1.close() 

Выход:

Platform 1228.3  
Transfer 690.3  
Total  1918.6 
2

Это элементарная задача преобразования специально для быстрой обработки с помощью TXR. Я просто скопировать и вставить образец данных и вывод в xform.txr, затем добавляют директивы и переменные:

$ txr xform.txr data 
Table 1 
Platform 1228.3 
Transfers 690.3 
Total  1918.6 

Table 2 
Platform 2996.3 
Transfers 3811.4 
Total  6807.7 

Код в xform.txr:

@(collect) 
<@{prefix}Plat> = @plat 
<@{prefix}Tran> = @tran 
<@{prefix}Total> = @tot 
@(end) 
@(output) 
@ (repeat :counter (table 1)) 
Table @table 
Platform @plat 
Transfers @tran 
Total  @tot 

@ (end) 
@(end) 
Смежные вопросы