读写文本文件

时间:2016-06-06 21:03:04

标签: file python-3.x text

我必须使用像这样的文本文件:

<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:

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

我建议不要逐个字符地检查,而是建议在线上使用关键字in。然后,您可以使用split轻松生成空格之间的单词列表,例如["<KeyPlat>", "=", "1228.3"]将成为"<KeyPlat> = 1228.3".split(' ')的结果。然后你只需要像你喜欢的那样格式化你的输出。我更喜欢.format notation。

我使用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