格式化输出到外部txt文件

时间:2016-11-08 11:08:27

标签: python python-3.x

fp = open ('data.txt','r')
saveto = open('backup.txt','w')
someline = fp.readline()
savemodfile = ''
while someline :
    temp_array = someline.split()
    print('temp_array[1] {0:20} temp_array[0] {0:20}'.format(temp_array[1], temp_array[0]), '\trating:', temp_array[len(temp_array)-1]))
    someline = fp.readline()
    savemodfile =  temp_array[1] + '  ' + temp_array[0] +',\t\trating:'+ temp_array[10]
    saveto.write(savemodfile + '\n')
fp.close()
saveto.close()

输入文件:data.txt包含此模式的记录:firstname姓氏年龄地址

我希望backup.txt具有以下格式:姓氏名字地址年龄

如何以格式化的方式将数据存储在backup.txt中?我想我应该以某种方式使用format()方法......

我使用代码中的print对象向您展示我目前对format()的理解。当然,我没有得到预期的结果。

3 个答案:

答案 0 :(得分:0)

回答你的问题: 您确实可以在字符串模板上使用.format()方法,请参阅文档https://docs.python.org/3.5/library/stdtypes.html#str.format

例如:

'the first parameter is {}, the second parameter is {}, the third one is {}'.format("this one", "that one", "there")

将输出:'the first parameter is this one, the second parameter is that one, the third one is there'

您的情况似乎没有正确使用format()'temp_array[1] {0:20} temp_array[0] {0:20}'.format(temp_array[1], temp_array[0])会输出类似'temp_array[1] Lastname temp_array[0] Lastname '的内容。那是因为{0:20}会将第一个参数输出到format(),右边用空格填充到20个字符。

此外,您的代码还有许多需要改进的地方。我猜你正在学习Python,这是正常的。这是一个功能等效的代码,可以生成您想要的输出,并充分利用Python的功能和语法:

with open('data.txt', 'rt') as finput, \
     open('backup.txt','wt') as foutput:
    for line in finput:
        firstname, lastname, age, address = line.strip().split()
        foutput.write("{} {} {} {}\n".format(lastname, firstname, address, age)

答案 1 :(得分:0)

此代码将在屏幕和输出文件中为您提供格式化输出

fp = open ('data.txt','r')
saveto = open('backup.txt','w')
someline = fp.readline()
savemodfile = ''
while someline :
    temp_array = someline.split()
    str = '{:20}{:20}{:20}{:20}'.format(temp_array[1], temp_array[0], temp_array[2], temp_array[3])
    print(str)    
    savemodfile =  str
    saveto.write(savemodfile + '\n')
    someline = fp.readline()    

fp.close()
saveto.close()

但是这不是一个处理文件的非常好的代码,请尝试使用以下模式:

with open('a', 'w') as a, open('b', 'w') as b:
    do_something()

请参阅:How can I open multiple files using "with open" in Python?

答案 2 :(得分:0)

fp = open ('data.txt','r')
saveto = open('backup.txt','w')
someline = fp.readline()
savemodfile = ''
while someline :
    temp_array = someline.split()
    someline = fp.readline()
    savemodfile = '{:^20} {:^20} {:^20} {:^20}'.format(temp_array[1],temp_array[0],temp_array[3],temp_array[2])
    saveto.write(savemodfile + '\n')
fp.close()
saveto.close()