Python没有正确编辑文件

时间:2014-01-19 20:09:33

标签: python gpx

应该很容易修复,但我在这里看不到问题。

a = 18
b = 30
c = 00
input = open('13.gpx', 'r')
output = open('14.gpx', 'w')
for line in input.readlines():
    if line == '<time>2014-01-19T18:30:00Z</time>':
        d = str(int(a))
        e = str(int(b))
        f = str(int(c))
        output.write('<time>2014-01-19T' + d + ':' + e + ':' + f + 'Z</time>')
        c = c + 18.4712
        if c >= 60:
            b = b + 1
            c = c - 60
        else:
            print('hi')
        if c >= 60:
            a = a + 1
            b = b - 60
        else:
            print('hi')
    else:
        output.write(line)

我尝试了很多东西,但它总是打印出原始文件,并且不会更改任何时间戳。

2 个答案:

答案 0 :(得分:1)

您的代码逻辑是:

对于文件中的每一行:

  1. 如果是'<time>2014-01-19T18:30:00Z</time>',请构建该行的完全副本并将其写入输出文件;或
  2. 如果不是,只需将其直接写入输出文件即可。
  3. 您希望在两个文件之间进行哪些更改?

答案 1 :(得分:1)

文件中的文本行以换行符结束,因此您的相等测试将不起作用:

if line == '<time>2014-01-19T18:30:00Z</time>':

从行的开头和结尾删除空格:

if line.strip() == '<time>2014-01-19T18:30:00Z</time>':

无需再次将整数转换为int,如果使用字符串格式,则无需转换为str()

output.write('<time>2014-01-19T{}:{}:{}Z</time>'.format(a, b, int(c))

您可能希望将这三个变量重命名为hoursminutesseconds,并修正if c >= 60:行中的错误;很可能你想要其中一个来测试分钟,另一个是秒;你现在只测试秒值(c)溢出两次。

您也不需要使用file.readlines();你可以直接在文件对象上循环 ;它会产生线条:

for line in input:

我会使用与input不同的名称;您现在正在屏蔽内置的input()函数。