用Python实现换行符转换的脚本的教程


Posted in Python onApril 16, 2015

很简单的一个东西,在'\n'、'\r\n'、'\r'3中换行符之间进行转换。
用法

usage: eol_convert.py [-h] [-r] [-m {u,p,w,m,d}] [-k] [-f]

                      filename [filename ...]
Convert Line Ending
positional arguments:

  filename        file names
optional arguments:

  -h, --help      show this help message and exit

  -r              walk through directory

  -m {u,p,w,m,d}  mode of the line ending

  -k              keep output file date

  -f              force conversion of binary files

源码

这只能算是argparse模块和os模块的utime()、stat()、walk()的一个简单的练习。可以用,但还相当不完善。

#!/usr/bin/env python 
  #2009-2011 dbzhang800 
  import os 
  import re 
  import os.path 
   
  def convert_line_endings(temp, mode): 
    if mode in ['u', 'p']: #unix, posix 
      temp = temp.replace('\r\n', '\n') 
      temp = temp.replace('\r', '\n') 
    elif mode == 'm':   #mac (before Mac OS 9) 
      temp = temp.replace('\r\n', '\r') 
      temp = temp.replace('\n', '\r') 
    elif mode == 'w':   #windows 
      temp = re.sub("\r(?!\n)|(?<!\r)\n", "\r\n", temp) 
    return temp 
   
  def convert_file(filename, args): 
    statinfo = None 
    with file(filename, 'rb+') as f: 
      data = f.read() 
      if '\0' in data and not args.force: #skip binary file... ? 
        print '%s is a binary file?, skip...' % filename 
        return 
      newdata = convert_line_endings(data, args.mode) 
      if (data != newdata): 
        statinfo = os.stat(filename) if args.keepdate else None 
        f.seek(0) 
        f.write(newdata) 
        f.truncate() 
    if statinfo: 
      os.utime(filename, (statinfo.st_atime, statinfo.st_mtime)) 
    print filename 
   
  def walk_dir(d, args): 
    for root, dirs, files in os.walk(d): 
      for name in files: 
        convert_file(os.path.join(root, name), args) 
   
  if __name__ == '__main__': 
    import argparse 
    import sys 
    parser = argparse.ArgumentParser(description='Convert Line Ending') 
    parser.add_argument('filename', nargs='+', help='file names') 
    parser.add_argument('-r', dest='recursive', action='store_true', 
        help='walk through directory') 
    parser.add_argument('-m', dest='mode', default='d', choices='upwmd', 
        help='mode of the line ending') 
    parser.add_argument('-k', dest='keepdate', action='store_true', 
        help='keep output file date') 
    parser.add_argument('-f', dest='force', action='store_true', 
        help='force conversion of binary files') 
    args = parser.parse_args() 
    if args.mode == 'd': 
      args.mode = 'w' if sys.platform == 'win32' else 'p' 
   
    for filename in args.filename: 
      if os.path.isdir(filename): 
        if args.recursive: 
          walk_dir(filename, args) 
        else: 
          print '%s is a directory, skip...' % filename 
      elif os.path.exists(filename): 
        convert_file(filename, args) 
      else: 
        print '%s does not exist' % filename
Python 相关文章推荐
一个检测OpenSSL心脏出血漏洞的Python脚本分享
Apr 10 Python
python下MySQLdb用法实例分析
Jun 08 Python
Django的信号机制详解
May 05 Python
理解Python中的绝对路径和相对路径
Aug 30 Python
Python中的单行、多行、中文注释方法
Jul 19 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
在python中画正态分布图像的实例
Jul 08 Python
Django--权限Permissions的例子
Aug 28 Python
python scatter函数用法实例详解
Feb 11 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
Python下的subprocess模块的入门指引
Apr 16 #Python
Python下的twisted框架入门指引
Apr 15 #Python
Python代码调试的几种方法总结
Apr 15 #Python
详解Python中with语句的用法
Apr 15 #Python
python获取本机外网ip的方法
Apr 15 #Python
python中常用检测字符串相关函数汇总
Apr 15 #Python
python使用自定义user-agent抓取网页的方法
Apr 15 #Python
You might like
Laravel中使用自己编写类库的3种方法
2015/02/10 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
针对PHP开发安全问题的相关总结
2019/03/22 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
解析vue中的$mount
2017/12/21 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
python实现屏保计时器的示例代码
2018/08/08 Python
Django后台admin的使用详解
2019/07/08 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
Oracle性能调优原则
2012/05/03 面试题
网络工程师职业规划
2014/02/10 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
交通工程专业推荐信
2014/09/06 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书