前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python HOWTOs 系列:换行指南

Python HOWTOs 系列:换行指南

作者头像
口仆
发布2021-02-04 11:36:31
9020
发布2021-02-04 11:36:31
举报

本系列文章旨在提供一系列特定主题的 Python 使用指南。

1 来历

在计算机还没被发明之前,人们通过「电传打字机」(Teletype Model 33)来打印文字,每秒可以打印 10 个字符。然而,该机器存在一个问题:在打完一行换行的时候,要用去 0.2 秒,正好可以打两个字符,如果在这 0.2 秒里,又有新的字符传过来,那么该字符将会丢失。

为了解决这个问题,研发人员通过在每行后面加两个表示结束的字符。一个叫做「回车」(carriage return),字符表示为 \r ,告诉打字机把打印头定位在左边界;另一个叫做「换行」(line feed),字符表示为 \n ,告诉打字机将纸向下移一行(补充:实际上回车与换行的概念来源于更早出现的机械英文打印机)。

随着计算机的发明,上述两个概念也被搬到了计算机上。然而,由于当时存储器的高昂费用,一些研究者认为在每行结尾加两个字符有些过于浪费,于是在不同的操作系统上出现了分歧:

  • Linux 系列操作系统中每行结尾:\n
  • Windows 操作系统每行结尾:\r\n
  • 老的 Mac 系统每行结尾(Classic Mac OS):\r
  • 新的 Mac 系统每行结尾(macOS):\n

Tips:大部分编辑器都支持多种形式的换行,所以一般感受不到系统间换行符的区别。

本小节内容参考自这篇文章[1]。

2 Python中的换行

下面以在 Mac 中读取一个 windows 中生成的 txt 文件为例,解释 python 下换行符的转换问题。

2.1 Python2

代码语言:javascript
复制
with open('input.txt','r') as f:
    for line in f:
        line=line.strip('\r\n')
        print str(line)
  • 直接使用 'r' 读取会保持原来的换行符(\r\n
  • 使用 'rU' 读取会把所有的换行符(\r \n \r\n)替换为 \n
  • strip 只要头尾包含有指定字符序列中的字符就删除

2.2 Python3

代码语言:javascript
复制
with open('input.txt','r') as f:
    for line in f:
        line=line.strip('\n')
        print(str(line))
  • 可以通过 open 函数的 newline 参数来控制 Universal new line mode
  • 读取时,不指定 newline,则默认开启 Universal new line mode,所有的 \n, \r, 或 \r\n 被默认转换为 \n
  • 写入时,不指定 newline,则输出的换行符为各系统默认的换行符(\n, \r, 或 \r\n),如果指定 newline='\n',则换行符都会被替换为 \n(相当于 Universal new line mode
  • 不论读或者写时,newline='' 都表示不转换

参考资料

[1]

回车与换行: http://www.ruanyifeng.com/blog/2006/04/post_213.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 口仆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 来历
  • 2 Python中的换行
    • 2.1 Python2
      • 2.2 Python3
        • 参考资料
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档