2012-11-15 45 views
0

如何在單獨的行上打印列表中的每個單獨元素,並在元素之前打印元素的行號?列表信息也將從文本文件中檢索。如何在單行上打印列表中的每個元素,前面加上python中的行號?

到目前爲止,我有,

import sys 
with open(sys.argv[1], 'rt') as num: 
    t = num.readlines() 
    print("\n"[:-1].join(t)) 

目前給人的讀出:

Blah, blah, blah 
etc, etc, etc 
x, x, x 

但我想這個讀出:

1. Blah, blah, blah 
2. etc, etc, etc 
3. x, x, x 

感謝您的幫助。

+1

爲什麼不只是'「」.join(t)'? - 「\ n」[: - 1] .join(t)'很難閱讀... – mgilson

+0

如果您明確地遍歷這些行,而不是通過聯接表達式打印它們,對您來說很容易。 –

+0

現在我已經將它從「\ n」切換到「」,[:-1]是爲了擺脫自動添加到列表中每個元素末尾的\ n。 – user1825241

回答

2

您可以使用enumerate()並使用str.rstrip()從字符串中刪除所有類型的尾隨空格。你也可以使用rstrip('\n')如果你確保換行符將是\n只:

for i,x in enumerate(t,1): 
    print ("{0}. {1}".format(i,x.rstrip())) 
+0

這會給你一行額外的換行符。 (你從行中獲得一個,從'print'獲得一個。) – mgilson

+0

現在你從兩端剝離字符。也許'.rstrip('\ n')'? – mgilson

+0

@mgilson我認爲只是'rstrip()'沒問題,因爲有些操作系統也使用'\ r \ n'作爲換行符。 –

0

這似乎是最容易enumerate,打印每一行,當您去:

import sys 
with open(sys.argv[1], 'r') as num: 
    for i,line in enumerate(num,1): 
     print("%d. %s"%(i,line[:-1])) #equivalent to `"{0}. {1}".format(i,line[:-1])` 

當然,你可以包住整個事情的發生,如果你想使用join

def number_lines(fname): 
    with open(fname,'r') as f: 
     for i,line in enumerate(f,1): 
      yield "%d. %s"%(i,line[:-1]) 

print('\n'.join(number_lines(sys.argv[1]))) 
0

使用fileinput.input可以通過行遍歷文件行。當fileinput.input返回下一行時,我們enumerate它跟蹤行號。由於輸入已經包含換行符,我們在print方法中使用end="",所以它不會添加不必要的換行符。使用format將行號和內容轉換爲格式化表示。

import fileinput 

for number, line in enumerate(fileinput.input(['some_file.txt']), 1): 
    print('{0}. {1}'.format(number, line), end="") 
相關問題