Python从文件中打印行

时间:2017-08-31 10:27:25

标签: python file for-loop printing

称呼,我正在尝试编写一个逐行打印文本文件数据的函数。输出需要有行号,后跟冒号和空格。我想出了以下代码;

def print_numbered_lines(filename):
    """Function to print numbered lines from a list"""
    data = open(filename)
    line_number = 1
    for line in data:
        print(str(line_number)+": "+line, end=' ')
        line_number += 1

问题是当我使用我创建的测试文本文件运行此函数时,第一行与输出中的其余行不在同一缩进级别,即。输出看起来有点像 1: 9874234,12.5,23.0,50.0 2: 7840231,70,60,85.4 3: 3845913,55.5,60.5,80.0 4: 3849511,20,60,50 我哪里错了?感谢

3 个答案:

答案 0 :(得分:2)

用空字符串而不是空格替换end参数的值。由于end参数是一个空格,它在每一行之后打印一个空格。所以后面的行在行的开头有一个空格。

def print_numbered_lines(filename):
    """Function to print numbered lines from a list"""
    data = open(filename)
    line_number = 1
    for line in data:
        print(str(line_number) + ": " + line, end='')
        line_number += 1

另一种方法是strip新行和打印而不将任何值传递给end参数。这将删除该行末尾的\n,默认情况下新行将打印为end="\n"

def print_numbered_lines(filename):
    """Function to print numbered lines from a list"""
    data = open(filename)
    line_number = 1
    for line in data:
        print(str(line_number) + ": " + line.strip("\n"))
        line_number += 1

答案 1 :(得分:0)

您将end参数指定为空格。所以在第一行之后每个都有这个额外的空间。

你从文件中读取的内容看起来像这样:

'9874234,12.5,23.0,50.0\n'

看看结局。发生线转换是由于原始线。

所以要得到你想要的东西,你只需要将打印的end参数改为空字符串(不是空格)

此外,我建议您更改函数的实现,并使用enumerate进行行编号。

def print_numbered_lines(filename):
    data = open(filename)
    for i, line in enumerate(data):
        print(str(i+1)+": "+line, end='')

答案 2 :(得分:0)

这与您的打印声明有关。

print(str(line_number)+": "+line, end=' ')

您可能已经看到在打印行时,它们之间有一条额外的行,然后您尝试使用end=' '解决此问题。

如果要删除“空”行,则应使用line.strip()。这将删除它们。

使用此:

print(str(line_number)+": "+line.strip())

strip也可以参数。这来自文档:

  

<强> str.strip( [字符]的

     

返回字符串的副本,其中删除了前导字符和尾随字符。 chars参数是一个字符串,指定要删除的字符集。如果省略或None,则chars参数默认为删除空格。 chars参数不是前缀或后缀;相反,它的所有值组合都被剥离了:

那是什么?

文件中的行没有被分隔成不同的行。在linux上,换行符由\n表示。普通编辑器通过将文本向下推入新行来转换它们。

当读取文件时,Python会在这些\n上分隔行,但不会将它们丢弃。在打印时,它们会被再次解释,并与换行符print相结合,会有一个新行“过多”。

print语句中的end参数只会更改打印行后print将使用的内容。默认值为\n

使用end=" !"时检查它的作用:

1: aaa
 !2: bbb
 !3: ccc

您可以在'aaa'之后看到\n导致换行符(这是字符串的一部分),然后在该打印后添加end的内容。所以它增加了!。下一行打印在同一行,因为在打印之前没有其他换行会导致换行。