代码如下,以及如何在目录树中移动目录并处理

2019-10-05 01:06 来源:未知

 代码如下

  这里的小运以秒为单位,并且从壹玖陆陆年11月1日始发算起。为了拿走以天为单位的终极访谈日期,能够选取下列代码:
  import time # time.time()再次回到当前光阴
  age_in_days = (time.time()-time_of_last_access)/(60*60*24)
  为了拿走文件的详细音信,能够动用os.stat函数和stat模块中的别的实用程序来完成目标,如下:

用到了os的三个接口

  作为上述remove函数达成的三个注记,我们开展了下列测量检验:
  if not isinstance(files, list):
  它其实是过分严刻。我们供给的只是贰个被遍历的三个文书/目录名种类。实际上,我们并不爱戴名称是还是不是存款和储蓄在一个列表、元组也许数值数组中,所以更加好的测量检验应该像下边那样:
  if not operator.isSequenceType(files):
  
  四、文件的复制与重命名   当大家要复制文件的时候,能够运用shutil模块:
  import shutil
  shutil.copy(myfile, tmpfile)
  #拷贝最终访谈时间和最终修改时间:
  shutil.copy2(myfile, tmpfile)
  # 拷贝一个目录树:
  shutil.copytree(root_of_tree, destination_dir, True)
  Copytree的第多个参数规定对符号链接的管理,在那之中True表示保留符号链接;而False则意味使用文件的情理别本代替符号链接。
  Python语言能够很好地支撑路线名的跨平台组成:Os.path.join能选用正确的分界符(在UNIX和Mac OS X操作系统中行使/,在 Windows 上运用)来衔接目录和文书名,变量os.curdir和os.pardir分别代表当前职业目录及其父目录。 像上面包车型地铁UNIX操作系统命令
  cp .
  能够行使Python语言提供一个跨平台的兑现:
  shutil.copy(os.path.join(os.pardir,os.pardir,'f1.c'), os.curdir)
  Os模块中的rename函数通常被用于重命名二个文本:
  os.rename(myfile, 'tmp.1') # 将myfile重命名字为'tmp.1'
  那个函数也可用来在同一的文件系统之内移动文件。这里,大家将myfile移动到目录d上面:
  os.rename(myfile, os.path.join(d, myfile))
  在跨文件系统移动文件的时候,能够先采用shutil.copy2来复制文件,然后再删除原本的别本就可以,如下:
  shutil.copy2(myfile, os.path.join(d, myfile))
  os.remove(myfile)
  前面这种活动文件的诀倘若最安全的。
  五、分解路线名   假如我们运用变量fname来寄放三个含有完整路线的文书名,举个例子:
  /usr/home/hpl/scripting/python/intro/hw.py
  有的时候候,大家要求将这样的文书路线拆分为着力名称hw.py和目录名/usr/home/hpl/scripting/python/intro。在Python语言中,可以选择下列代码达到指标:
  basename = os.path.basename(fname)
  dirname = os.path.dirname(fname)
  # 或
  dirname, basename = os.path.split(fname)
  扩大名是通过os.path.splitext函数提抽出来的,
  root, extension = os.path.splitext(fname)
  那样,fname中的增加名部分即.py被赋给变量extension,而别的部分则赋给了变量root。若是想赢得不带点号的扩大名的话,只需使用os.path.splitext(fname)[1][1:]即可。
  假设贰个文件名称为f,其扩充名随便,若想将其扩充名改为ext,能够利用上边包车型客车代码:
  newfile = os.path.splitext(f)[0] + ext
  下边是一个切实可行的身体力行:
  >>> f = '/some/path/case2.data_source'
  >>> moviefile = os.path.basename(os.path.splitext(f)[0] + '.mpg')
  >>> moviefile
  'case2.mpg'
  六、目录的开创和活动   Os模块中的函数mkdir可以用来成立目录,而chdir函数则足以活动目录,如下:
  origdir = os.getcwd() # 将最近任务记下来
  newdir = os.path.join(os.pardir, 'mynewdir')
  if not os.path.isdir(newdir):
  os.mkdir(newdir) # 或者os.mkdir(newdir,'0755')
  os.chdir(newdir)
  ...
  os.chdir(origdir) # 重临原目录
  os.chdir(os.environ['HOME']) # 移到主目录
  假使大家想要在和睦的主目录下创造二个新目录py/src/test1,不过当前py、src和test1都不设有。如若使用mkdir命令来创建的话,须要使用三回本领建好那一个嵌套的目录,但是利用Python语言提供的os.makedirs命令的话,则无需那样麻烦了,该命令能够三遍建好整个目录:
  os.makedirs(os.path.join(os.environ['HOME'],'py','src','test1'))
  七、遍历目录树   上面包车型大巴函数调用
  os.path.walk(root, myfunc, arg)
  将遍历root目录树;然后,对每种目录名dirname分别调用myfunc(arg, dirname, files)就能够,这里参数files是dir中的文件名列表(可由此调用os.listdir(dirname)来获取);arg是客商从调用代码中传递来的参数。对于UNIX操作系统客商来讲,Python语言中跨平台的os.path.walk也正是Unix命令find。
  在解释os.path.walk的用法的时候,大家常利用写出主目录中全部子目录内的文书的名目为例实行表明。当然,大家也足以在八个交互式的Python命令行中使用下列代码段来回味os.path.walk的选择:
  def ls(arg, dirname, files):
  print dirname, 'has the files', files
  os.path.walk(os.environ['HOME'], ls, None)
  本例中,参数arg并不是必须,所以在os.path.walk调用中让其取值为None就可以。
  为了列出主目录中有着大于1Mb的文件,能够运用上边包车型地铁代码:
  def checksize1(arg, dirname, files):
  for file in files:
  filepath = os.path.join(dirname, file)
  if os.path.isfile(filepath):
  size = os.path.getsize(filepath)
  if size > 1000000:
  size_in_Mb = size/1000000.0
  arg.append((size_in_Mb, filename))
  bigfiles = []
  root = os.environ['HOME']
  os.path.walk(root, checksize1, bigfiles)
  for size, name in bigfiles:
  print name, '大小为', size, 'Mb'
  今后,我们使用arg来创建二个数据结构,这里是三个2元组构成的列表,个中各类2元组存放文件的尺码(以MB为单位)和完好的文件路线。如若用于全体目录的函数调用中都要更换arg的话,那么arg必得是二个可变的数据结构,即允许适本地扩充改造。
  参数dirname是眼下正值访问的目录的相对路线,而参数files内的文件名则是争论于dirname的相对路径。在此期间,当前专门的学业目录并未更动,那正是说该脚本依然呆在剧本运营时刻所在的目录中。那就是干什么大家供给把filepath弄成带有dirname和file的相对路线的原由。若要改变当前专门的学问目录为dirname,只要在针对各类目录调用os.path.walk的函数中调用一下os.chdir(dirname),然后在该函数的末段重新调用os.chdir(dirname)将当前职业目录改回原值就可以,如下所示:
  def somefunc(arg, dirname, files):
  origdir = os.getcwd(); os.chdir(dirname)
  
  os.chdir(origdir)
  os.path.walk(root, somefunc, arg)
  当然,若是您愿意也足以编写具备类似意义的代码来代替os.path.walk。上边包车型客车代码,将对准各样文件而非各个目录来调用的自定义函数,如下所示:
  def find(func, rootdir, arg=None):
  # 对rootdir目录中的每种文件调用func
  files = os.listdir(rootdir) # 获取rootdir目录中的全部文件
  files.sort(lambda a, b: cmp(a.lower(), b.lower()))
  for file in files:
  fullpath = os.path.join(rootdir, file)
  if os.path.islink(fullpath):
  pass
  elif os.path.isdir(fullpath):
  find(func, fullpath, arg)
  elif os.path.isfile(fullpath):
  func(fullpath, arg)
  else:
  print 'find: cannot treat ', fullpath
  上面包车型大巴函数find能够从scitools模块中收获。与内置函数os.path.walk相反,我们的find函数以大小写敏感的字母顺序来访谈文件和目录。
  大家能够运用find函数来列出全数大于1Mb的文书:
  def checksize2(fullpath, bigfiles):
  size = os.path.getsize(fullpath)
  if size > 1000000:
  bigfiles.append('%.2fMb %s' % (size/1000000.0, fullpath))
  bigfiles = []
  root = os.environ['HOME']
  find(checksize2, root, bigfiles)
  for fileinfo in bigfiles:
  print fileinfo
  参数arg带来了惊天动地的布帆无恙。大家能够利用它来还要贮存输入数据和扭转的数据结构。下四个轨范将搜聚全体大于一定尺寸的隐含规定增加名的文书的文书名和大小。输出的结果遵照文件大小排列。
  bigfiles = {'filelist': [], # 文件名和分寸列表
  'extensions': ('.*ps', '.tiff', '.bmp'),
  'size_limit': 1000000, # 1 Mb
  }
  find(checksize3, os.environ['HOME'], bigfiles)
  def checksize3(fullpath, arg):
  treat_file = False
  ext = os.path.splitext(fullpath)[1]
  import fnmatch # Unix的shell风格的通配符相称
  for s in arg['extensions']:
  if fnmatch.fnmatch(ext, s):
  treat_file = True # fullpath带有准确的恢宏名
  size = os.path.getsize(fullpath)
  if treat_file and size > arg['size_limit']:
  size = '%.2fMb' % (size/1000000.0) # 打印
  arg['filelist'].append({'size': size, 'name': fullpath})
  # 依照轻重缓急排列文件
  def filesort(a, b):
  return cmp(float(a['size'][:-2]), float(b['size'][:-2]))
  bigfiles['filelist'].sort(filesort)
  bigfiles['filelist'].reverse()
  for fileinfo in bigfiles['filelist']:
  print fileinfo['name'], fileinfo['size']
  注意为列表排序的函数,bigfiles['filelist']函数中的种种元素正是三个字典,键size保存着多少个字符串,不过在进行相比较前边大家亟须将单位Mb(最终八个字符)去掉,并将其更改为浮点数。
  八、小结   对于文本和目录的拍卖,就算能够因而操作系统命令来变成,然而Python语言为了便利开采职员以编制程序的方式处理相关专门的学业,提供了过多甩卖公事和目录的松手函数。主要的是,那么些函数无论是在Unix、Windows还是Macintosh平台上,它们的选择方法是完全一致的。本文详细分解了这么些函数的使用格局,在那之中,我们率先介绍了突显目录内容的功能,然后陈述如何测量试验贰个文件名对应的是贰个标准文件、目录依然链接,以及提取文件大小和日期的措施。之后,大家还将介绍怎么样删除文件和目录,怎么着复制和删除文件,以及怎么样将二个完好无缺的公文路线分解成目录部分和文书名部分,最终,我们讲课目录的成立,以及如何在目录树中活动目录并管理公事。

输入钦定目录,程序管理该目录及其包罗有big.jpg文件的子目录,
将名称类似’big(5).jpg’的文件改名称叫’big_5.jpg’,
即 big(N).jpg ==> big_N.jpg
代码如下:

复制代码 代码如下:

3、对于地方的措施自身还找到一些办法

print myfile, '是一个',
  if os.path.isfile(myfile):
  print 'plain file'
  if os.path.isdir(myfile):
  print 'directory'
  if os.path.islink(myfile):
  print 'link'

 代码如下

复制代码 代码如下:

Availability: Unix, Windows.

复制代码 代码如下:

再补充二个

  time_of_last_access = os.path.getatime(myfile)
  time_of_last_modification = os.path.getmtime(myfile)
  size = os.path.getsize(myfile)

import os
 
dirpath="D:/workbench/crazyant.net/myfiles"
for fname in os.listdir(dirpath):
    newfname=fname[3:]
    newfpath="%s/%s"%(dirpath,newfname)
    oldfpath="%s/%s"%(dirpath,fname)
     
    os.rename(oldfpath, newfpath)

复制代码 代码如下:

2、对文本举办重命名

  # 建立10个目录tmp_* ,以及10各文件tmp__*:
  for i in range(10):
  os.mkdir('tmp_'+str(i))
  f = open('tmp__'+str(i), 'w'); f.close()
  remove('tmp_1') # tmp_1为目录
  remove(glob.glob('tmp_[0-9]') + glob.glob('tmp__[0-9]'))

os.rename(src, dst)
Rename the file or directory src to dst. If dst is a directory, OSError will be raised. On Unix, if dst exists and is a file, it will be replaced silently if the user has permission. The operation may fail on some Unix flavors if src and dst are on different filesystems. If successful, the renaming will be an atomic operation (this is a POSIX requirement). On Windows, if dst already exists, OSError will be raised even if it is a file; there may be no way to implement an atomic rename when dst names an existing file.

...

TAG标签:
版权声明:本文由凯时国际ag下载发布于技术核心,转载请注明出处: 代码如下,以及如何在目录树中移动目录并处理