如何在没有换行符的情况下读取文件?

新手上路,请多包涵

在 Python 中,调用例如 temp = open(filename,'r').readlines() 会生成一个列表,其中每个元素都是文件中的一行。但是,这些字符串末尾有一个换行符,这是我不想要的。

如何在没有换行符的情况下获取数据?

原文由 Yotam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 891
2 个回答

您可以使用 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) != '\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]

它利用了 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 7c7352cabb74fa 中的 f 的精确副本 ---

原文由 Bakuriu 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 vivek 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题