首页 > 解决方案 > Python 初学者:如何使文本 #1 看起来像文本 #2

问题描述

我正在尝试创建一个循环,该循环将格式化、空格和对齐第一个文本以匹配第二个文本。我正在从 txt 文件输入文本 1,我希望它将文本 2 输出到 txt 文件中。语法应该打印文本 #2 并与第三列相加。

文本1

$1120.47 $944.42
$72.29 $588.23
$371.21 $2183.84

文字#2

$ 1120.47  $  944.42  $ 2064.89
$   72.29  $  588.23  $  660.52
$  371.21  $ 2183.84  $ 2555.05

这就是我到目前为止所拥有的......你可以说这只是我第二周写 python。:) 任何帮助将不胜感激。

inputfilename= input('Enter sales file name: ')
outputfilename=input('Enter name for total sales file: ')

infile=open(inputfilename, "r")
outfile=open(outputfilename, "w")

salessequence=infile.readlines()

for sale in salessequence:
    splitsale=sale.strip().split(" ")
    firstsale=splitsale[0]
    lastsale=splitsale[1]
    dollarsign1=firstsale[0:1]
    firstsale2=firstsale[1:]
    lastsale2=lastsale[1:]
    total=firstsale2 + lastsale2
    print(total, file=outfile)

infile.close()
outfile.close()

print('All finished')

标签: python-3.x

解决方案


在您的尝试中要纠正三件事:

  1. 使用字符串方法rjust(右对齐)对齐列。它在字符串的开头添加了额外的空格。

  2. 读写完成后总是关闭文件。或者使用 with 语法(参见下面的代码示例),因为它会在退出 with 块后自动关闭文件。

  3. 用于file.write将行写入文件

  4. 查看csv 模块pandas 库,因为它们提供了高级数据和文件处理技术。

从文件读取并写入新文件的示例代码:

inputfilename= input('Enter sales file name: ')
outputfilename=input('Enter name for total sales file: ')

with open(inputfilename, 'r') as i, open(outputfilename, 'w') as o:
    for line in i:
        fst_sale, lst_sale = line.split(' ')
        fst_sale = float(fst_sale[1:])
        lst_sale = float(lst_sale[1:])
        tot_sale = fst_sale + lst_sale
        new_line = ''.join(
            ['$' + str(x).rjust(10) 
            for x in [fst_sale, lst_sale, tot_sale]]
        )
        o.write(new_line + '\n')

推荐阅读