windows和Linux的换行符问题

windows和Linux的换行符问题


因为windows和linux换行符的问题,把数据拿给windows机器进行处理要进行换行符的切换。
windows的换行符是’\r\n’,linux的换行符是’\n’

sed 命令

首先想到的是使用sed命令,但是发现mac上的sed只能置换每一行空格前的第一个字符。于是使用sed命令没有换行成功。

find命令用来解决如上图所示的参数list超过上限的问题

find ./3-label -name "*.txt" -exec sed -i '' 's/\n/\r\n/' {}  \;-print

还要注意mac上的sed命令加了-i之后后面要加’’,如果有备份文件引号里就填备份文件的内容,如果没有就为空。才能在mac上正常运行。

换行脚本

于是无奈只好自己编写一个脚本来处理了。

#-*-encoding:utf-8 -*-
import os
import glob
import re
import argparse
import time
from collections import namedtuple
import sys
import shutil
import random


def read_files(root_label_path):
    #print("reading label files....")
    files = []
    for line in glob.iglob(os.path.join(root_label_path, "**", "*.txt"), recursive=True):
    #for line in glob.iglob(os.path.join(root_label_path,"**"), recursive=True):
        if re.search(r'classes.txt', line):
            continue
        files.append(line)

    return list(files)

def convert_linebreak_to_windows(labels):

    for label_file in labels:
        if re.search(r"classes.txt", label_file):
            continue           
        boxes = []
        with open(label_file) as f:
            for line in f.readlines():
                line = line.replace('\n','')
                #line = line + '\r\n'
                boxes.append(line)
        #label_filename = label_file.replace('3/', '')
        #labelpath = "3-labels/" + label_filename
        with open(label_file, 'w') as file:
            for l in boxes:
                #print("writing line {}".format(l))
                file.write(l + '\r\n')

def convert_linebreak_to_linux(labels):
    for label_file in labels:
        if re.search(r"classes.txt", label_file):
            continue           
        boxes = []
        with open(label_file) as f:
            for line in f.readlines():
                line = line.replace('\r\n','')
                #line = line + '\r\n'
                boxes.append(line)
        #label_filename = label_file.replace('3/', '')
        #labelpath = "3-labels/" + label_filename
        with open(label_file, 'w') as file:
            for l in boxes:
                #print("writing line {}".format(l))
                file.write(l + '\n')

if __name__ == '__main__':
    labels = read_files(sys.argv[1])
    ### linux
    #convert_linebreak_to_linux(labels)
    ### windows
    convert_linebreak_to_windows(labels)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值