Python脚本-删除Windows上的换行符
第一个python脚本
在工作中,由于是在Linux服务器上开发,编译服务器当然也就是Linux了,但是我的电脑是windows系统,VIM这个编辑器有需要配置很多配置文件才能有强大的功能,所以我放弃了在服务器上使用VIM写代码,选择了在windows使用了VS code进行开发(毕竟我比较懒)。
由于操作系统的不同,代码中换行符也是不同的,这就导致有的代码编译不过,报的错误是行尾多了^M这个东西,这第一个脚本就是批量删除文件的^M。
引入标准库
对文件进行操作,所以引入os和sys库
1 |
|
获取目录下所有文件
因为需要批量处理文件,所以我们首先要保证可以得到目录下所有文件,这使用到了listdir()函数。
1 |
|
运行会发现,我们只输出了当前目录的文件名和子目录名,我们来按下面方式优化一下:
- 把对目录的操作写成函数。
- 使用判断如果是目录就递归调用,这使用到了isdir()函数。运行会发现,确实打印出来了。
1
2
3
4
5
6
7
8def delete_func(p):
for f in os.listdir(p):
if os.path.isdir(f):
delete_func(f)
else:
print f
a = "./"
delete_func(a)
为文件名添加路径
虽然获取了文件名,但是我们的工作目录还是在给的路径下,子目录里面操作不到,所以需要我们添加路径,这就用到了join()函数。
1 |
|
清除^M
得到了文件后我们就可以清除^M了,我们可以通过调用Linux中的sed命令来清除,调用外部命令需要用到system()函数。
1 |
|
关于sed请看Linux命令-sed,使用system()后不要忘了判断是否执行成功。
优化
支持单文件清除
使用isfile()函数对参数进行判断,如果是文件直接清除。
1 |
|
使用传入的路径
使用sys.argv[1]来获取传入的路径:
- 首先判断参数是否大于两个。
- 判断参数是否是文件或者目录中的一个。
- 调用函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#!/usr/bin/env python
#coding:utf-8
import os
import sys
def delete_function(a):
if os.path.isdir(a):
for f in os.listdir(a):
if os.path.isdir(os.path.join(a,f)):
delete_function(os.path.join(a,f))
else:
cmd = "sed -i 's/\r//' " + os.path.join(a,f)
if os.system(cmd) == 0:
print "success delete " + os.path.join(a,f) + " ^M"
else:
cmd = "sed -i 's/\r//' " + a
if os.system(cmd) == 0:
print "success delete " + a + " ^M"
if len(sys.argv) < 2:
print "please input a path"
sys.exit(0)
if not (os.path.isfile(sys.argv[1]) or os.path.isdir(sys.argv[1])):
print "please input a dir or file"
else:
delete_function(sys.argv[1])
总结
以上就是脚本的最终版本了,如果你需要同时处理多个不同的目录,就自己动手再优化一下吧。
(给个提示:遍历argv然后执行函数)
Python脚本-删除Windows上的换行符
https://carl-5535.github.io/2020/11/13/python脚本/Python脚本-删除Windows上的换行符/