2016-01-22 48 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))