如何读取没有换行符的文件?
如何读取没有换行符的文件?
在Python中,调用例如temp = open(filename,\'r\').readlines()
会得到一个列表,其中每个元素是文件中的一行。然而,这些字符串末尾有一个换行符,而我不想要它们。如何在不包含换行符的情况下获取这些数据?
admin 更改状态以发布 2023年5月21日
你可以使用str.splitlines
读取整个文件并按行拆分:
temp = file.read().splitlines()
或者你可以手动去掉换行符:
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) != ' ': # add missing newline if not already present f.write(' ') f.flush() f.seek(0) lines = [line[:-1] for line in f]
或者一个更简单的替代方法是strip
去掉换行符:
[line.rstrip(' ') for line in file]
甚至可以使用如下这个比较难读的方法:
[line[:-(line[-1] == ' ') or len(line)+1] for line in file]
它利用了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()
对称,writelines()
方法不会添加结束的换行符,因此f2.writelines(f.readlines())
会在f2
中产生f
的完全副本。