这是一个简短的脚本,用于直接将 Windows行尾 (
rn也称为
CRLF)直接转换为 Linux / Unix行尾
(
n也称为
LF)(无需创建额外的输出文件):
Linux / Unix到Windows# replacement stringsWINDOWS_LINE_ENDING = b'rn'UNIX_LINE_ENDING = b'n'# relative or absolute file path, e.g.:file_path = r"c:UsersUsernameDesktopfile.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)
只需
str.replace()像这样在调用中交换行尾的常量即可:
content.replace(UNIX_LINE_ENDING,WINDOWS_LINE_ENDING)。
代码说明
- 重要说明:二进制模式 我们需要确保同时以二进制模式(
mode='rb'
和mode='wb'
)打开文件两次,以使转换正常进行。
当以文本模式(
mode='r'或
mode='w'不使用
b)打开文件时,平台的本机行尾(
rn在Windows和
r旧的Mac
OS版本上)将自动转换为Python的Unix风格的行尾:
n。因此,对的调用
content.replace()找不到
rn要替换的任何行尾。
在二进制模式下,不会进行此类转换。因此,to的呼叫
str.replace()可以完成其工作。
二进制字符串 在Python 3中,如果没有另外声明,则字符串存储为Unipre(
UTF-8
)。但是我们以二进制模式打开文件-因此我们需要b
在替换字符串之前添加内容,以告诉Python也将这些字符串作为二进制进行处理。原始字符串 在Windows上,路径分隔符是反斜线
,我们需要使用来在普通的Python字符串中进行转义\
。通过r
在字符串前面添加,我们创建了一个所谓的“原始字符串”,它不需要任何转义。因此,您可以将Windows资源管理器中的路径直接复制/粘贴到脚本中。
( 提示: 在Windows资源管理器中,按
CTRL+
L可以从地址栏中自动选择路径。)
- 替代方法 我们打开文件两次,以避免需要重新定位文件指针。我们也可以用一次打开该文件,
mode='rb+'
但随后我们需要在读取其内容(open_file.seek(0)
)之后将指针移回开始,并在写入新文件(open_file.truncate(0)
)之前截断其原始内容。
只需在写入模式下再次打开文件即可自动完成。
干杯和快乐的编程,
winklerrr
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)