2016-01-22 149 views
-2

我正在处理一个代码,它将打印出python中的文本文件的内容。'行字符'后的意外字符'

一切似乎稳定,所以相距甚远从我的最后一行(S):

f2 = open('D:\\1CP0_02_June 2016_Paper - Copy\\paintingJobs.txt','r') 
for lineB in f2: 
    if "A" in lineB: 
     listB = [lineB] 
print("Estimate Number\tEstimate Date\tCustomer ID\tFinal Total\tAmount Paid\tAmount Outstanding") 
print(listB[0]\tlistB[1]\tlistB[2]\tlistB[3]\tlistB[4]\tlistB[5]) 

,最后一行创建执行过程中出现错误,说“行字符后意外的字符”

任何提示吗?

listB有它(只是为了澄清)以下内:

['E5342,21/09/2015,C103,290,A,290\n'] 
['E5344,22/09/2015,C105,180,A,180\n'] 
['E5345,22/09/2015,C106,815,A,400\n'] 
['E5348,23/09/2015,C109,370,A,200\n'] 
['E5349,25/09/2015,C110,480,A,250\n'] 
['E5350,25/09/2015,C111,330,A,330\n'] 
['E5353,28/09/2015,C114,272,A,200\n'] 
['E5355,29/09/2015,C116,530,A,450\n'] 
['E5358,29/09/2015,C119,380,A,380\n'] 
['E5361,01/10/2015,C122,374,A,374\n'] 
['E5363,01/10/2015,C124,930,A,500\n'] 
['E5364,02/10/2015,C125,915,A,800\n'] 
['E5365,02/10/2015,C126,1486,A,1486\n'] 
['E5367,03/10/2015,C128,427,A,350\n'] 
['E5368,05/10/2015,C129,1346,A,1346\n'] 
['E5371,10/10/2015,C132,289,A,289\n'] 
['E5373,10/10/2015,C134,1023,A,550\n'] 
['E5376,13/10/2015,C137,297,A,297\n'] 
['E5380,15/10/2015,C141,425,A,425'] 
+0

你的'listB'和'tlistB'是什么?可能你的'listB'有一个错字错误? –

+0

tlistB不存在,每个listB之前有'\ t'。 –

+0

所以这是一个错误 –

回答

4
print(listB[0]\tlistB[1]\tlistB[2]\tlistB[3]\tlistB[4]\tlistB[5]) 

这是什么?它看起来像你想打印制表符,但你不能只是坚持一个制表符某处有它打印出来,它必须是一个字符串:

print("{}\t{}\t{}\t{}\t{}\t{}".format(*listB[:6]) 

它可能会更易于刚刚加入的琴弦,但:

print("\t".join(listB)) 
+0

我如果任何元素不是字符串,则认为.join()会引发TypeError。 – shmee

0

也许尝试这样的最后一行代替。

print(listB[0], "\t", listB[1], "\t", listB[2], "\t", listB[3], 
     "\t", listB[4], "\t", listB[5]) 
0

更新根据更新的问题我的回答:

你并不需要在列表中有这样的数据:

['E5342,21/09/2015,C103,290,A,290\n'] 

倒不如把它作为一个字符串(因为它是在列表中的字符串,它没有任何意义)

所以,如果你有你的listB像这样:

['E5342,21/09/2015,C103,290,A,290\n', 'E5344,22/09/2015,C105,180,A,180\n', 'E5345,22/09/2015,C106,815,A,400\n', 'E5348,23/09/2015,C109,370,A,200\n', 'E5349,25/09/2015,C110,480,A,250\n', 'E5350,25/09/2015,C111,330,A,330\n', 'E5353,28/09/2015,C114,272,A,200\n'] 

应打印在接下来的方式你的数据:

for item in listB: 
    print("Estimate Number: {0}\tEstimate Date: {1}\tCustomer ID: {2}\tFinal Total: {3}\tAmount Paid: {4}\tAmount Outstanding: {5}".format(*item.strip().split(',')) 
0

通过上面的代码,listB将只包含该文件的最后一行,因为你每次迭代分配[lineB]而不是进行附加的。

另外,如果“A”碰巧出现在你的字符串的第五个字段以外的任何地方,例如,在估算编号或客户编号中,即使已付金额不是“A”,它也将包含在listB中。

这个怎么样?

listB = [] 
with open("d:/filename.txt") as f2: 
    for lineB in f2: 
     if "A" == lineB.split(',')[4]: 
      listB.append(lineB.replace(',','\t').rstrip('\n')) 

print("Estimate Number\tEstimate Date\tCustomer ID\tFinal Total\tAmount Paid\tAmount Outstanding") 
print("\n".join(listB))