如何读取没有换行符的文件?

40 浏览
0 Comments

如何读取没有换行符的文件?

在Python中,调用例如temp = open(filename,\'r\').readlines()会得到一个列表,其中每个元素是文件中的一行。然而,这些字符串末尾有一个换行符,而我不想要它们。如何在不包含换行符的情况下获取这些数据?

admin 更改状态以发布 2023年5月21日
0
0 Comments

temp = open(filename,'r').read().split('
')

0
0 Comments

你可以使用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的完全副本。

0