我使用以下代码逐行从文本文件中读取并在屏幕上打印。
with open("source.txt") as f:
content = f.readlines()
print(content)
print('\n')
f.close()
但\n
只是附加到输出,而输出只是在一行中。例如,如果文件是这样的:
abc
def
ghi
输出是:
['abc\n', 'def\n', 'ghi']
然后我尝试使用'\n'
更改带有"\n"
的单引号,如下所示:
with open("source.txt") as f:
content = f.readlines()
print(content)
print("\n")
f.close()
我需要的实际输出是:
abc
def
ghi
我能做些什么?操作平台:Mac(Unix)提前感谢。
答案 0 :(得分:2)
你应该这样做:
with open('source.txt', 'r') as f:
for line in f: #iterate over lines
line = line.strip() #removes whitespaces and new lines
print line #print the line, the print function adds new line
readlines()将整个文件加载到内存中,如果文件大于内存,则无法读取,因此迭代文件。
答案 1 :(得分:1)
您可以使用rstrip()
:
>>> for i in content:
... print i.rstrip()
...
abc
def
ghi
您的代码存在的问题是它没有按照您的预期执行操作。 content
是一个列表,打印列表只有['abc\n', etc]
。您可以使用for循环(如我所示)遍历列表中的每个元素,并在单独的行中单独打印出所有元素。
我不确定你为什么会print('\n')
,但我认为你来自另一种编程语言。 Python会自动添加换行符,因此不需要添加换行符:)。
最后,需要rstrip()
来删除换行符,否则会出现:
>>> for i in L:
... print i
...
abc
def
ghi
答案 2 :(得分:1)
问题是你试图打印列表对象本身,而不是循环遍历列表并打印单个项目:
>>> lis = ['abc\n', 'def\n', 'ghi']
>>> print lis
['abc\n', 'def\n', 'ghi']
print lis实际打印列表对象的str表示:
>>> print str(lis)
['abc\n', 'def\n', 'ghi']
循环列表并打印单个项目。在python中,我们可以遍历列表本身,这与我们需要索引的C / C ++不同。
>>> for item in lis:
... print item.rstrip('\n') #removes the trailing '\n'
...
abc
def
ghi
列表上的for循环或任何其他iterable逐个返回该iterable中的下一个项目,并将其分配给for循环中使用的变量:
for x in lis: #in each iteration x is assgined the next item from lis
print x
答案 3 :(得分:0)
with open('source.txt', 'r') as f:
content = f.read()
print content