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

很简单的一个东西,在'\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
shell脚本换行符、linux脚本换行符、shell脚本中换行符、bat脚本换行符、shell脚本中的换行符,以便于您获取更多的相关知识。

时间: 2024-08-21 02:33:10

用Python实现换行符转换的脚本的教程_python的相关文章

python将ip地址转换成整数的方法_python

本文实例讲述了python将ip地址转换成整数的方法.分享给大家供大家参考.具体分析如下: 有时候我们用数据库存储ip地址时可以将ip地址转换成整数存储,整数占用空间小,索引也会比较方便,下面的python代码自定义了一个ip转换成整数的函数,非常简单,代码同时还提供了整数转换成ip地址的方法. import socket, struct def ip2long(ip): """ Convert an IP string to long """

在IIS服务器上以CGI方式运行Python脚本的教程_python

由于接触到Python Web开发,正好把最简单的CGI方式研究了一下,话说在Windows下配置Python的Web开发还真的蛮麻烦的,Linux下配置倒挺容易,正好微软有技术文章<Using Python Scripts with IIS>介绍了这些内容,此文介绍了两种方法,一是使用ASP引擎来运行Python脚本,这个可能需要用到ActivePython,当然ASP技术已经过时了,我今天就简单介绍下CGI模块运行方式. 编写简单的支持CGI的Python脚本(本文介绍3.2版本的Pyth

使用Python编写一个在Linux下实现截图分享的脚本的教程_python

引子 Linux下不支持QQ等功能丰富的IM,虽然可以通过wine运行QQ2012,但是还是喜欢在gtalk群中聊天,gtalk群不支持图片方式,这就要靠我们大家自己来解决了,eleven开放了一个Image上传和显示接口,提供了使用curl来解决,但是我们公司的网络使用squid禁止了curl的访问,所以整天看他们这么爽的分享图片我也不甘心阿,所以就使用Python写了一个分享图片的脚本实现 使用scrot截图,然后使用urllib2库上传图片,如果存在PyQt4库则会将结果放到剪贴板上,如果

利用Python实现简单的相似图片搜索的教程_python

大概五年前吧,我那时还在为一家约会网站做开发工作.他们是早期创业公司,但他们也开始拥有了一些稳定用户量.不像其他约会网站,这家公司向来以洁身自好为主要市场形象.它不是一个供你鬼混的网站--是让你能找到忠实伴侣的地方. 由于投入了数以百万计的风险资本(在US大萧条之前),他们关于真爱并找寻灵魂伴侣的在线广告势如破竹.Forbes(福布斯,美国著名财经杂志)采访了他们.全国性电视节目也对他们进行了专访.早期的成功促成了事业起步时让人垂涎的指数级增长现象--他们的用户数量以每月加倍的速度增长.对他们而

在Python的setuptools框架下生成egg的教程_python

本文介绍了 setuptools 框架的内容,它是 PEAK 的一个副项目,它提供了比 distutils 更加简单的包管理和发行功能.开始 setuptools 模块很会 "规避".例如,如果我们下载一个使用 setuptools 而不是使用 distutils 构建的包,那么安装就应该可以像我们期望的一样工作:通常使用 python setup.py install 就可以.为了实现这种功能,使用 setuptools 绑定在一起的包就会在归档文件中包含一个很小的引导模块 ez_s

仅用500行Python代码实现一个英文解析器的教程_python

语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理.自然语言引入了很多意外的歧义,以我们对世界的了解可以迅速地发现这些歧义.举一个我很喜欢的例子: 正确的解析是连接"with"和"pizza",而错误的解析将"with"和"eat"联系在了一起: 过去的一些年,自然语言处理(NLP)社区在语法分析方面取得了很大的进展.现在,小小的 Python 实现可能比广泛应用的 Stanford 解析器表现得更出色. 文章剩下

Python使用cookielib模块操作cookie的实例教程_python

cookielib是一个自动处理cookies的模块,如果我们在使用爬虫等技术的时候需要保存cookie,那么cookielib会让你事半功倍!他最常见的搭档模块就是python下的urllib和request. 核心类 1.Cookie该类实现了Netscape and RFC 2965 cookies定义的cookie标准,基本可以理解为某一条cookie数据. 部分代码如下,很多属性是不是很眼熟? self.domain_initial_dot = domain_initial_dot s

Python时区设置方法与pytz查询时区教程_python

时区的概念与转换 首先要知道时区之间的转换关系,其实这很简单:把当地时间减去当地时区,剩下的就是格林威治时间了. 例如北京时间的18:00就是18:00+08:00,相减以后就是10:00+00:00,因此就是格林威治时间的10:00.而把格林威治时间加上当地时区,就能得到当地时间了. 例如格林威治时间的10:00是10:00+00:00,转换成太平洋标准时间就是加上-8小时,因此是02:00-08:00.而太平洋标准时间转换成北京时间转换也一样,时区相减即可. 例如太平洋标准时间的02:00-

用Python编写一个简单的FUSE文件系统的教程_python

如果你是我的长期读者,那么你应该知道我在寻找一个完美备份程序,最后我写了一个基于bup的我自己的加密层. 在写encbup的时候,我对仅仅恢复一个文件就必须要下载整个巨大的档案文件的做法不甚满意,但仍然希望能将EncFS和 rdiff-backup一起使用来实现可远程挂载.加密.去重.版本化备份的功能. 再次试用obnam 后(啰嗦一句:它还是慢的出奇),我注意到了它有一个mount命令.深入研究后,我发现了fuse-python和fusepy,感觉用Python写一个FUSE文件系统应该挺简单