在Python中,调用
temp = open(filename,'r').readlines()
产生一个列表,其中每个元素都是文件中的一行。这有点愚蠢,但仍然:readlines()
还在每个元素上写入换行符,这是我不希望发生的事情。
如何避免?
您可以使用str.splitlines
读取整个文件并分割行:
str.splitlines
或者您也可以手工删除换行符:
temp = file.read().splitlines()
注意:仅当文件以换行符结尾时,后一种解决方案才有效,否则最后一行将丢失字符。
此假设在大多数情况下是正确的(尤其是对于文本编辑器创建的文件,无论如何,它们经常do都会添加结尾换行符。]
如果要避免这种情况,可以在文件末尾添加换行符:
temp = [line[:-1] for line in file]
或更简单的替代方法是换行with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
:
strip
甚至,尽管很难理解:
[line.rstrip('\n') for line in file]
[利用了以下事实:[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
的返回值不是布尔值,而是被评估为true或false的对象。
or
方法实际上等效于:
readlines
因为def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
保留换行符,readline()
保留换行符。
[注意:为使readlines()
对称,readlines()
方法不会not添加结尾换行符,因此writelines()
在writelines()
中产生f2.writelines(f.readlines())
的精确副本。
temp = [line.rstrip() for line in open("filename")]
f
f2
另一个例子:
一次读取文件。从字符串temp = open(filename,'r').read().split('\n')
]的结尾处删除不需要的字符
temp = open(filename,'r').read().splitlines()
另请参阅
str.rstrip(chars)
和str.rstrip(chars)
((python> = 2.0)
我认为这是最好的选择。
尝试一下:
str.lstrip([chars])
要删除所有前导和尾随空格(从temp = [line.strip() for line in file.readlines()]
启发而来-
temp = [line.strip() for line in open("filename")]