首页 > 解决方案 > Python 不能正常使用回车符(新行)

问题描述

根据python的官方文档,3.x及以上版本删除了读取文件的“U”参数,并默认包含对不同回车的通用支持。但是,这不适用于最新版本(3.8.6)。

file1 = open('cube_demo.gcode', 'rt') 
Lines = file1.readlines() 

  
count = 0
for line in Lines: 
    print(line)
    count += 1

我期望类似这样的输出:

G92 E0 ; reset extrusion distance
; Filament gcode
M104 S235

G1 Z0.250 F10800.000 ; move to next layer (0)
G1 E-7.00000 F3300.00000 ; retract
G92 E0 ; reset extrusion distance

但我得到:

G92 E0 ; reset extrusion distance

; Filament gcode

M104 S235


G1 Z0.250 F10800.000 ; move to next layer (0)

G1 E-7.00000 F3300.00000 ; retract

G92 E0 ; reset extrusion distance

为什么会这样?根据如何使用 Python 从文本文件中删除回车符?python 现在支持通用换行符。另外: PEP 278——通用换行支持

那么我错过了什么?我不想剥离任何东西,因为这需要我首先弄清楚每个文件使用哪个回车符。由于此脚本适用于每个操作系统,因此这是必需的。

那么如何让这种通用支持按预期工作呢?

很奇怪,我看到很多话题,和这个很相似。但实际上没有一个有 1:1 这个线程的目标。怎么会?例如,有些人想要删除所有换行符,有些人正在剥离。为什么没有人对不起作用的通用支持功能有任何问题?

标签: pythonparsingscriptingcross-platformcarriage-return

解决方案


这样做的原因是readlines()返回按原样读取的行,这意味着返回的列表项还将包括末尾的新行:

>>> import io
>>> io.StringIO('line_1\nline_2').readlines()
['line_1\n', 'line_2']

第二个新行插入print()end='\n'参数的默认值。


推荐阅读