【问题标题】:How do I print each element of a list on individual lines, preceded by the line number in python?如何在单独的行上打印列表的每个元素,前面是 python 中的行号?
【发布时间】:2012-11-15 18:32:38
【问题描述】:

如何在单独的行上打印列表的每个单独元素,并在元素之前打印元素的行号?列表信息也将从文本文件中检索。

到目前为止,

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

感谢您的帮助。

【问题讨论】:

  • 为什么不只是"".join(t)? -- "\n"[:-1].join(t)` 很难读...
  • 如果您明确地迭代这些行,而不是通过连接表达式打印它们,这对您来说会很容易。
  • 我现在已经把它从 "\n" 切换到 "",[:-1] 是为了去掉自动添加到列表中每个元素末尾的 \n .
  • @user1825241 -- 我想你很困惑。您正在加入一堆字符串(末尾有一个换行符),在每个字符串之间插入一个空字符串。这与剥离换行符并加入换行符给出相同的结果,但后一种情况不是你正在做的。

标签: python list element line-numbers


【解决方案1】:

您可以使用enumerate()str.rstrip() 从字符串中删除所有类型的尾随空格。如果您确定换行符将仅为\n,您也可以使用rstrip('\n')。:

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

【讨论】:

  • 这将为您每行提供一个额外的换行符。 (您从线路中获得 1 个,从 print 获得 1 个。)
  • 现在你正在从两端剥离字符。也许.rstrip('\n')
  • @mgilson 我认为 rstrip() 没问题,因为某些操作系统也使用 \r\n 作为换行符。
  • 但是rstrip 会去掉所有尾随空格——这通常不是问题,但至少值得考虑。如果您使用通用换行支持打开文件,那么您只需设置 .rstrip('\n')
【解决方案2】:

使用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])))

【讨论】:

    【解决方案3】:

    使用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="")
    

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 2018-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多