称呼,我正在尝试编写一个逐行打印文本文件数据的函数。输出需要有行号,后跟冒号和空格。我想出了以下代码;
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
我哪里错了?感谢
答案 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
的内容。所以它增加了!
。下一行打印在同一行,因为在打印之前没有其他换行会导致换行。