with open('dog_breeds.txt', 'w') as writer:
writer.write("PugrnJack Russell TerrierrnEnglish Springer SpanielrnGerman ShepherdrnStaffordshire Bull TerrierrnCavalier King Charles SpanielrnGolden RetrieverrnWest Highland White TerrierrnBoxerrnBorder Terrierrn")
writer.close()
这将产生一个.txt文件,该文件的图像可以在这里看到。
然后,我开始运行以下代码:
import time
reader = open('dog_breeds.txt', 'r+')
line = reader.readline()
print('Output of readline while loop is: ')
while line != '':
print(line, end='')
time.sleep(1)
line = reader.readline()
reader.close()
然后,当我执行代码时,我得到了这个输出:
Output of readline while loop is:
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
所以,我有点困惑。我认为print((中的end = ''
参数会导致.txt文件中的每一行都打印在打印的前一行的末尾,从而显示一个长行(即PugJackRussellTerrierEnglish…(。相反,显示的是多行,.txt文件中每一行是一个单独的行。是不是我误会了什么?
默认情况下,python在打印中使用新行。(打印默认值为end="n"
(
您的文件每行使用rn
,因此如果您尝试使用普通打印(不使用end=""
(在循环中逐行打印
它会打印这样的格式:
*first_line_in_file
*new empty line because you have rn
*new empty line because python print(end="n")
*second line
...
但是现在用end="0"它是这样的:
*first_line_in_file
*new empty line because you have rn
*second line
...
结论:end=""
不会从文本中删除n
,它只是阻止python向输出中添加额外的n
。
我不知道你是否在使用Windows,但当我运行你的代码时:
with open('dog_breeds.txt', 'w') as writer:
writer.write("PugrnJack Russell TerrierrnEnglish Springer SpanielrnGerman ShepherdrnStaffordshire Bull TerrierrnCavalier King Charles SpanielrnGolden RetrieverrnWest Highland White TerrierrnBoxerrnBorder Terrierrn")
在我的Windows机器上,换行符rn
创建两个换行符:
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
因此,当您开始读取文件时,即使使用end=''
参数进行打印,仍然会有一行额外的新行。
为了克服这个问题,你需要在剥离时检查行是否有数据,然后打印,如果行有数据,例如:
with open('dog_breeds.txt') as reader:
for line in reader:
if line.rstrip(): # if the stripped line has data
print(line.rstrip(), end='')
结果:
PugJack Russell TerrierEnglish Springer SpanielGerman ShepherdStaffordshire Bull TerrierCavalier King Charles SpanielGolden RetrieverWest Highland White TerrierBoxerBorder Terrier
以下是适用于Unix和Windows系统的内容:
import re
FILE = 'dog_breeds.txt'
with open(FILE, 'w') as writer:
writer.write("PugrnJack Russell TerrierrnEnglish Springer SpanielrnGerman ShepherdrnStaffordshire Bull TerrierrnCavalier King Charles SpanielrnGolden RetrieverrnWest Highland White TerrierrnBoxerrnBorder Terrierrn")
with open(FILE) as reader:
print(re.sub('[rn]', '', reader.read()))
输出:
PugJack Russell TerrierEnglish Springer SpanielGerman ShepherdStaffordshire Bull TerrierCavalier King Charles SpanielGolden RetrieverWest Highland White TerrierBoxerBorder Terrier
这个编写的脚本可以随心所欲地执行:
import time
reader = open('dog_breeds.txt', 'r+')
print('Output of readline while loop is: ')
for i in reader:
line = i.rstrip("n")
if line:
print(line)
time.sleep(1)
reader.close()
注意CCD_ 10。
运行上述代码的结果是以下输出:
Output of readline while loop is:
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
每一行都会在一秒钟后按照您在代码中的意图打印出来。
https://docs.python.org/3/library/functions.html#print
"sep和end都必须是字符串;它们也可以是None,这意味着使用默认值。若并没有给出对象,print((将只写结束">