如何在Windows机器上以Python将CRLF转换为LF

所以我得到了那些模板,它们都以LF结尾,我可以用format填充一些术语,并且仍然可以通过用“ wb”打开来获取LF文件

这些模板在Windows计算机上的部署脚本中使用,以在UNIX服务器上进行部署。

问题是,很多人都将这些模板弄得一团糟,我100%确信其中有些人会在其中放入一些CRLF。

我如何使用python将所有crlf转换为lf?

谢谢。

编辑

好吧,我的糟糕,我的代码中有一个错误,即使文件以前使用crlf,在“ wb”中打开也总是将lf放在行的末尾。

如果您想知道,这是我正在使用的代码:

#!/usr/bin/env python

# --*-- encoding: iso-8859-1 --*--

import string

def formatFile(templatePath, filledFilePath, params, target):

openingMode = 'w'

if target == 'linux':

openingMode += 'b'

with open(templatePath, 'r') as infile, open(filledFilePath, openingMode) as outfile:

for line in infile:

template = string.Template(line.decode('UTF-8'))

outfile.write(template.substitute(**params).encode('UTF-8'))

所以没问题,一切都很好:x

回答:

就地转换线尾(使用Python 3

Windows到Linux / Unix

这是一个简短的脚本,用于直接将 (\r\n也称为CRLF)直接转换为

\n也称为LF)(无需创建额外的输出文件):

# replacement strings

WINDOWS_LINE_ENDING = b'\r\n'

UNIX_LINE_ENDING = b'\n'

# relative or absolute file path, e.g.:

file_path = r"c:\Users\Username\Desktop\file.txt"

with open(file_path, 'rb') as open_file:

content = open_file.read()

content = content.replace(WINDOWS_LINE_ENDING, UNIX_LINE_ENDING)

with open(file_path, 'wb') as open_file:

open_file.write(content)

Linux / Unix到Windows

只需str.replace()像这样在调用中交换行尾的常量即可:content.replace(UNIX_LINE_ENDING,

WINDOWS_LINE_ENDING)


代码说明

  • 我们需要确保同时以二进制模式(mode='rb'mode='wb')打开文件两次,以使转换正常进行。

当以文本模式(mode='r'mode='w'不使用b)打开文件时,平台的本机行尾(\r\n在Windows和\r旧的Mac

OS版本上)将自动转换为Python的Unix风格的行尾:\n。因此,对的调用content.replace()找不到\r\n要替换的任何行尾。

在二进制模式下,不会进行此类转换。因此,to的呼叫str.replace()可以完成其工作。

  • 在Python 3中,如果没有另外声明,则字符串存储为Unicode(UTF-8)。但是我们以二进制模式打开文件-因此我们需要b在替换字符串之前添加内容,以告诉Python也将这些字符串作为二进制进行处理。

  • 在Windows上,路径分隔符是反斜线\,我们需要使用来在普通的Python字符串中进行转义\\。通过r在字符串前面添加,我们创建了一个所谓的“原始字符串”,它不需要任何转义。因此,您可以将Windows资源管理器中的路径直接复制/粘贴到脚本中。

提示: 在Windows资源管理器中,按CTRL+L可以从地址栏中自动选择路径。)

  • 我们打开文件两次,以避免需要重新定位文件指针。我们也可以用一次打开该文件,mode='rb+'但随后我们需要在读取其内容(open_file.seek(0))之后将指针移回开始,并在写入新文件(open_file.truncate(0))之前截断其原始内容。

只需在写入模式下再次打开文件即可自动完成。

干杯和快乐的编程,

winklerrr

以上是 如何在Windows机器上以Python将CRLF转换为LF 的全部内容, 来源链接: utcz.com/qa/430054.html

回到顶部