如何从Python输出中删除不需要的缩进(文件处理)?

时间:2016-12-27 20:37:49

标签: python file

我一直致力于使用Python 3.5.2从文件读取的程序,其中结果以表格的形式输出。我将数据存储为CSV(但作为文本文件)

我不确定为什么,但是当我运行该程序时,结果似乎在第一条记录后有两个空格缩进。

def display():
    with open("StudentScores.txt","r") as Scores:
        print("{0:<10}      {1:<10}        {2:<5}".format("\nFIRSTNAME","SURNAME","SCORE"))
        for eachLine in Scores:
            eachLine.strip()
            each=eachLine.split(",")
            print("{0:<10}      {1:<10}        {2:<5}".format(each[0],each[1],each[2]),end="",sep="")

我使用的文本文件:

Ralph,White,41
Maria,Cox,26
Sharon,Barnes,88
Eric,Garcia,31
Cheryl,Scott,60
Ron,Cooper,11
Lori,Ramirez,34
William,Jones,60
Evelyn,Baker,28
Janice,Sanders,10
Ralph,White,41
Maria,Cox,26
Sharon,Barnes,88
Eric,Garcia,31
Cheryl,Scott,60
Ron,Cooper,11
Lori,Ramirez,34
William,Jones,60
Evelyn,Baker,28
Janice,Sanders,10

最后我收到的输出(从IDLE复制)

FIRSTNAME      SURNAME           SCORE
Ralph           White             41
  Maria           Cox               26
  Sharon          Barnes            88
  Eric            Garcia            31
  Cheryl          Scott             60
  Ron             Cooper            11
  Lori            Ramirez           34
  William         Jones             60
  Evelyn          Baker             28
  Janice          Sanders           10
  Ralph           White             41
  Maria           Cox               26
  Sharon          Barnes            88
  Eric            Garcia            31
  Cheryl          Scott             60
  Ron             Cooper            11
  Lori            Ramirez           34
  William         Jones             60
  Evelyn          Baker             28
  Janice          Sanders           10

有什么建议吗?我只在新笔记本电脑(Windows 10)上使用Python 3天,如果有任何帮助的话。

2 个答案:

答案 0 :(得分:2)

当您从文件中读取行时:

for eachLine in Scores:

这些行包括末尾的换行符(如果文件缺少最终换行符,则可能是最后一行除外)。

致电strip时:

eachLine.strip()

不会改变eachLine。它返回一个新的剥离字符串,您可以立即忽略并丢弃该字符串。 eachLine仍然有一个尾随换行符。

致电split时:

each=eachLine.split(",")

each[2]有该追踪换行符。

当您使用替换字段each[2]打印{2:<5}时,each[2]包含2位数字和换行符。 <5左对齐它在宽度为5的字段中,用空格填充结尾,因此它会打印两个数字,换行符和下一行两个空格

要解决此问题,请实际存储strip的返回值,停止填充分数字段,并停止传递end=""sep=""也是多余的,因为您一次只print一个字符串:

def display():
    with open("StudentScores.txt","r") as Scores:
        print("{0:<10}      {1:<10}        {2}".format("FIRSTNAME","SURNAME","SCORE"))
        for eachLine in Scores:
            eachLine = eachLine.strip()
            each = eachLine.split(",")
            print("{0:<10}      {1:<10}        {2}".format(each[0],each[1],each[2]))

答案 1 :(得分:0)

更改此行:

print("{0:<10}      {1:<10}        {2:<5}".format(each[0],each[1],each[2]),end="",sep="")

对此:

# Just changing <5 to <3
print("{0:<10}      {1:<10}        {2:<3}".format(each[0],each[1],each[2]),end="",sep="")

它应该以您想要的格式打印。