将换行符 (LF) 替换为空格,但不影响回车 (CR)



有没有办法删除换行符 (LF) 并替换为空格而不影响回车符 (CR)?

我已经尝试了以下方法,但它也删除了回车符:

import fileinput
import sys
def replaceAll(file,searchExp,replaceExp):
for line in fileinput.input(file, inplace=1):
if searchExp in line:
line = line.replace(searchExp,replaceExp)
sys.stdout.write(line)
replaceAll("hold1.csv","n","s")

输入文本将如下所示,使用 | 作为分隔符:

field1 | field2| field3 some textLF
more textLF
more text|field4 | field5 CR

我希望以以下格式看到:

field1 | field2| field3 some text more text more text|field4 | field5 CR

这不是您的替换代码删除回车符。默认情况下,Python 在文本模式下打开文件时规范化行尾;称为通用换行符的功能。请参阅open()函数文档:

从流读取输入时,如果newline为"无",则启用通用换行模式。输入中的行可以以""、"\r"或"\r"结尾,这些行在返回给调用方之前会转换为""。如果为 '',则启用通用换行模式,但行尾将返回给未转换的调用方。

您希望使用newline=''模式。不幸的是,fileinput模块不支持将inlineopenhook结合起来,因此您必须创建自己的备份才能重写文件:

import os
def replaceAll(file, searchExp, replaceExp):
backup = file + '.bak'
os.rename(file,  backup)
with open(backup, 'r', newline='') as source, open(file, 'w', newline='') as dest:
for line in source:
if searchExp in line:
line = line.replace(searchExp, replaceExp)
dest.write(line)

最新更新