V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fearme
V2EX  ›  Python

Python 为什么按行读取 txt 文本列表每一行都带了 \n

  •  
  •   fearme · 2017-08-18 10:20:05 +08:00 · 16802 次点击
    这是一个创建于 2689 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不能自动去掉 \n 么
    54 条回复    2017-08-20 10:51:05 +08:00
    Patrick95
        1
    Patrick95  
       2017-08-18 10:22:49 +08:00
    换行符。
    要去掉的话:
    for line in file.readlines():
    line=line.strip('\n')
    xingzhi1990
        2
    xingzhi1990  
       2017-08-18 10:23:14 +08:00
    Python 不会自动去掉换行符的。
    with open('test.txt', 'r') as f:
    lines = [line.strip() for line in f.readlines()]

    使用 strip()函数可以去掉行首和行尾的 whitespace,比如空格,制表符、换行符。
    geeglo
        3
    geeglo  
       2017-08-18 10:23:54 +08:00
    \n 是换行符。

    要去掉的话,自己处理
    linuap
        4
    linuap  
       2017-08-18 10:24:37 +08:00 via iPhone
    .rstrip("\n")
    mooncakejs
        5
    mooncakejs  
       2017-08-18 10:27:02 +08:00
    readlines 很慢的 ,, 直接 for line in file
    allinwonder
        6
    allinwonder  
       2017-08-18 10:30:36 +08:00 via iPhone
    Windows 下的文本文件行末是\n\r 哦
    fearme
        7
    fearme  
    OP
       2017-08-18 10:34:57 +08:00
    谢谢楼上各位的解答, 我主要是疑惑为什么还带个 '\n',以前用 delphi, 这种都是预处理掉 换行符的,所以疑惑了一下
    msg7086
        8
    msg7086  
       2017-08-18 11:05:41 +08:00   ❤️ 1
    @allinwonder 这是哪个位面的 Windows。
    yunkchen
        9
    yunkchen  
       2017-08-18 11:08:36 +08:00
    @allinwonder
    linux,unix:\r\n
    windows:\n
    Mac OS:\r
    cxyfreedom
        10
    cxyfreedom  
       2017-08-18 11:22:30 +08:00
    @allinwonder
    你 linux 和 windows 的搞反了吧
    cxyfreedom
        11
    cxyfreedom  
       2017-08-18 11:23:31 +08:00
    @yunkchen at 错人了。你 linux 和 windows 的搞反了吧
    yunkchen
        12
    yunkchen  
       2017-08-18 11:38:45 +08:00
    honeycomb
        13
    honeycomb  
       2017-08-18 11:59:13 +08:00   ❤️ 1
    @allinwonder
    @yunkchen
    @cxyfreedom
    总之 windows 的换行符是先回车再换行
    linux 只有回车,mac 只有换行
    allinwonder
        14
    allinwonder  
       2017-08-18 12:01:18 +08:00 via iPhone   ❤️ 4
    @msg7086 你们是搞笑吗?

    LF: Unix and Unix-like systems (Linux, macOS, FreeBSD, Multics, AIX, Xenix, etc.), BeOS, Amiga, RISC OS, and others[1]

    CR+LF: Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP/M, MP/M, Atari TOS, OS/2, Symbian OS, Palm OS, Amstrad CPC, and most other early non-Unix and non-IBM operating systems

    https://stackoverflow.com/questions/426397/do-line-endings-differ-between-windows-and-linux

    I translate this into these line endings in general:

    Windows: '\r\n'
    Mac (OS 9-): '\r'
    Mac (OS 10+): '\n'
    Unix/Linux: '\n'


    我 96 年开始玩电脑的,难道你们现在这些小年轻码农玩的不一样?
    jarlyyn
        15
    jarlyyn  
       2017-08-18 12:10:14 +08:00   ❤️ 1
    @allinwonder

    所以我们这个位面的 windows 是 /r/n,不是 /n/r.....
    livexia
        16
    livexia  
       2017-08-18 12:13:12 +08:00 via Android
    尴尬现场
    Miy4mori
        17
    Miy4mori  
       2017-08-18 12:15:55 +08:00 via iPhone
    尬秀现场
    allinwonder
        18
    allinwonder  
       2017-08-18 12:25:04 +08:00 via iPhone
    @jarlyyn 你们这个位面的不打错字?
    lslqtz
        19
    lslqtz  
       2017-08-18 12:44:37 +08:00
    楼上看的我一脸懵
    Orzpls
        20
    Orzpls  
       2017-08-18 12:49:22 +08:00 via Android
    @allinwonder
    你的回答才是完整的
    wizardoz
        21
    wizardoz  
       2017-08-18 13:37:56 +08:00
    因为本来就每一行都有 \n
    msg7086
        22
    msg7086  
       2017-08-18 13:58:02 +08:00   ❤️ 3
    @allinwonder 是是是,你把\r\n 打错成\n\r 一定是我们的错。
    错怪你了,不好意思啊。





    Patrick95
        23
    Patrick95  
       2017-08-18 14:03:16 +08:00
    「我玩电脑玩得早,你们这些小年轻也配挑我的错?」
    msg7086
        24
    msg7086  
       2017-08-18 14:08:33 +08:00
    @Patrick95 他以为 96 年开始玩电脑就算早的了……(无奈
    firebroo
        25
    firebroo  
       2017-08-18 14:09:10 +08:00
    我 96 年开始玩电脑的,难道你们现在这些小年轻码农玩的不一样?哈哈哈
    chinvo
        26
    chinvo  
       2017-08-18 14:10:31 +08:00
    @msg7086 #24

    年轻真好
    msg7086
        27
    msg7086  
       2017-08-18 14:13:29 +08:00
    @chinvo 我已是老头一个……
    Deeer
        28
    Deeer  
       2017-08-18 14:13:55 +08:00
    96 年就开始完电脑的大神,能帮我盗个号吗 (๑◔‿◔๑)
    chinvo
        29
    chinvo  
       2017-08-18 14:16:31 +08:00
    @msg7086 哇.jpg

    是不是歪楼了
    wildcat007
        30
    wildcat007  
       2017-08-18 14:50:24 +08:00
    @msg7086
    哈哈哈哈,那人真逗。

    第一次遇到这样的问题的时候是两个文档内容一模一样,是个密码字典。一看,哎呦喂,怎么一个 10M,一个 13M (假设)。
    看内容一样,看 16 进制发现不对,似乎是文件格式不同。最后百度了下,才知道每个系统下文件的换行字符不一样。

    对于 96 年开始玩电脑的,我掐指算了算,这人真“年轻”····

    哇.jpg
    nosugar
        31
    nosugar  
       2017-08-18 15:01:25 +08:00
    windows: \r\n
    unix(linux,mac): \n
    en.wikipedia.org/wiki/Newline
    swulling
        32
    swulling  
       2017-08-18 15:08:53 +08:00 via iPhone
    @allinwonder 自己看自己的六楼…摊手
    allinwonder
        33
    allinwonder  
       2017-08-18 17:48:19 +08:00 via iPhone
    @msg7086 一群 sb
    allinwonder
        34
    allinwonder  
       2017-08-18 17:49:17 +08:00 via iPhone
    @swulling 看看谁先挑衅谁的,sb
    allinwonder
        35
    allinwonder  
       2017-08-18 17:50:33 +08:00 via iPhone
    @firebroo sb 一个
    gdsing
        36
    gdsing  
       2017-08-18 18:27:53 +08:00
    文件不大就一次读入

    open(file).read().splitlines()
    swulling
        37
    swulling  
       2017-08-18 19:39:35 +08:00 via iPhone
    @allinwonder 你六楼说错,别人指出你的错误,然后你 14 楼说

    你们是搞笑么?


    怎么看也是你在挑衅别人啊,SB
    qnnnnez
        38
    qnnnnez  
       2017-08-18 19:46:52 +08:00
    Python 读文本文件根本不会读到 \r,三种行尾都会转换成 \n
    wormcy
        39
    wormcy  
       2017-08-18 20:59:18 +08:00 via Android
    瓜子花生矿泉水
    chinvo
        40
    chinvo  
       2017-08-18 22:14:18 +08:00
    @allinwonder 感谢扩充某个增强友善度的列表
    introom
        41
    introom  
       2017-08-18 22:23:09 +08:00 via Android
    @qnnnnez 嗯,我记得也是这样。
    zidian
        42
    zidian  
       2017-08-18 22:30:58 +08:00
    各位生活经验+1,不是每个人都有幽默感的
    F0nebula
        43
    F0nebula  
       2017-08-18 23:39:33 +08:00
    @allinwonder #33 喵喵喵?
    msg7086
        44
    msg7086  
       2017-08-18 23:54:22 +08:00   ❤️ 1
    RqPS6rhmP3Nyn3Tm
        45
    RqPS6rhmP3Nyn3Tm  
       2017-08-19 00:17:23 +08:00 via iPhone
    前排出售 96 年的拉菲和花生米
    Mirage09
        46
    Mirage09  
       2017-08-19 00:24:58 +08:00 via iPhone
    00 年开始玩电脑的看着楼上瑟瑟发抖
    lxml
        47
    lxml  
       2017-08-19 01:17:47 +08:00
    我之前一直以为 Linux \n 上换行是天经地义的事情,即使我知道 Windows 上是使用 \r\n,我也坚持认为一切微软出品必是邪魔歪道, 直到我看见 HTTP 协议中 的信息分行……
    allinwonder
        48
    allinwonder  
       2017-08-19 08:27:36 +08:00 via iPhone
    @msg7086 妈妈快看!我会粘贴 jpg 拉!还是 imgur 的呢,是不是比其他同学牛呢?


    所以说码农永远是社会底层的渣子。
    RTNelo
        49
    RTNelo  
       2017-08-19 09:16:24 +08:00
    表面迎合.jpg
    LeGendAI
        50
    LeGendAI  
       2017-08-19 10:37:09 +08:00   ❤️ 1
    ianchn
        51
    ianchn  
       2017-08-19 16:13:45 +08:00
    我的天
    firebroo
        52
    firebroo  
       2017-08-19 22:52:16 +08:00
    @allinwonder 你牛逼你牛逼,我是渣渣~~
    tempdban
        53
    tempdban  
       2017-08-20 04:58:21 +08:00 via Android
    @allinwonder 兄弟米心态怎么炸成这样,太有争斗心了。
    ragnaroks
        54
    ragnaroks  
       2017-08-20 10:51:05 +08:00
    @tempdban #53 看历史记录,仅鄙视"码农"这个群体.虽然不清楚发生了什么,但是还是要 @Livid
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2064 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:05 · PVG 09:05 · LAX 17:05 · JFK 20:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.