python 常用对linux系统文件及目录的操作

目录

1、取得当前目录——os.getcwd()

>>> import os
>>> s=os.getcwd()#获得当前运行脚本所在目录
>>> s
‘C:\\Python27‘
比如运行test.py,那么输入该命令就会返回脚本所在的文件夹位置。

例如将test.py放入A文件夹。并且希望不管将A文件夹放在硬盘的哪个位置,都可以在A文件夹内生成一个新文件夹。且文件夹的名字根据时间自动生成。

>>> import os
>>> import time
>>> folder = time.strftime(r"%Y-%m-%d_%H-%M-%S",time.localtime())
>>> os.makedirs(r‘%s/%s‘%(os.getcwd(),folder)) #创建以时间命名文件夹名
这是运行脚本的目录即‘C:\\Python27‘下多了一个以当前时间命名的文件夹

2、创建子目录——os.makedirs("path"),path是要创建的子目录

>>> os.makedirs("C:\\temp\\test") #这是C盘下就创建了temp目录,temp下嵌套的文件夹是test
(当然,也可能创建失败,比如path已存在,或者驱动器不在,或者无写权限等等)

3、更改当前目录——os.chdir()

相当于dos或Linux下的cd命令

>>> os.chdir(‘c:\\‘)  #将当前目录改为C盘根目录下
4、将路径分解为目录名和文件名——os.path.split()

格式为:fpath , fname = os.path.split( "要分解的路径")

>>> a,b=os.path.split("c:\\dir1\\dir2\\file.txt")
>>> print a
c:\dir1\dir2
>>> print b
file.txt
5、分解文件名的扩展名——os.path.splitext()

格式为:fpath_name , ftext = os.path.splitext( "要分解的路径")

>>> a,b=os.path.splitext("c:\\dir1\\dir2\\file.txt")
>>> print a
c:\dir1\dir2\file
>>> print b
.txt
6、判断一个路径(目录或文件)是否存在——os.path.exists()

格式为:os.path.exists(“要判断的路径或文件”)

>>> os.path .exists ("C:\\") #该路径存在
True
>>> os.path .exists ("C:\\123\\") #该路径不存在
False
>>> os.path .exists ("C:\\123.txt") #该文件不存在
False
>>> os.path .exists ("C:\\test.txt")  #该文件存在
True

7、判断一个路径是否有需要的文件——os.path.isfile("文件")

>>> os.path .isfile("C:\\test.txt")
True
>>> os.path .isfile("C:\\123.txt")
False
8、判断一个路径是否存在——os.path.isdir("路径")

>>> os.path .isdir("C:\\")
True
>>> os.path .isdir("H:\\")
False
9、获取目录中的文件及子目录的列表——os.listdir("路径")

相当于Windows下powershell中获取Get-ChildItem命令和Linux中的ls命令。但是这个显示不是以常见的列表的形式:

>>> os.listdir("C:\\")   #这里包括隐藏文件也显示出来了
[‘$Recycle.Bin‘, ‘360ld‘, ‘360rescue‘, ‘360SANDBOX‘, ‘360SysRt‘, ‘Boot‘, ‘bootmgr‘, ‘BOOTSECT.BAK‘, ‘CacheTemp‘, ‘Documents and Settings‘, ‘grldr‘, ‘IFRToolLog.txt‘, ‘inetpub‘, ‘MSOCache‘, ‘pagefile.sys‘, ‘Program Files‘, ‘Program Files (x86)‘, ‘ProgramData‘, ‘Python27‘, ‘Recovery‘, ‘RECYCLER‘, ‘SBTDR‘, ‘System Volume Information‘, ‘test.txt‘, ‘Users‘, ‘Windows‘]
示例:获取指定目录下的所有子目录的列表

>>> def getDirList( p ):
        p = str( p )
        if p=="":
              return [ ]
        p = p.replace( "/","\\")
        if p[ -1] != "\\":
             p = p+"\\"
        a = os.listdir( p )
        b = [ x   for x in a if os.path.isdir( p + x ) ]
        return b

>>> getDirList( "C:\\" )
[‘$Recycle.Bin‘, ‘360rescue‘, ‘360SANDBOX‘, ‘360SysRt‘, ‘Boot‘, ‘CacheTemp‘, ‘Documents and Settings‘, ‘inetpub‘, ‘MSOCache‘, ‘Program Files‘, ‘Program Files (x86)‘, ‘ProgramData‘, ‘Python27‘, ‘Recovery‘, ‘RECYCLER‘, ‘System Volume Information‘, ‘Users‘, ‘Windows‘]
  获取指定目录下所有文件的列表

>>> def getFileList( p ):
        p = str( p )
        if p=="":
              return [ ]
        p = p.replace( "/","\\")
        if p[ -1] != "\\":
             p = p+"\\"
        a = os.listdir( p )
        b = [ x   for x in a if os.path.isfile( p + x ) ]
        return b

>>> getFileList( "C:\\" )
[‘360ld‘, ‘bootmgr‘, ‘BOOTSECT.BAK‘, ‘grldr‘, ‘IFRToolLog.txt‘, ‘pagefile.sys‘, ‘SBTDR‘, ‘test.txt‘]
10、删除子目录——os.rmdir("path"),只能删除空目录

>>> os.rmdir("C:\\temp\\test") #注意只删除了test目录
>>> os.rmdir("C:\\temp")  #这里才删除了temp目录
                            文件

  python中模块的引入使得对文件的操作变的很简单。最基本的文件操作就是在文件中进行读写数据,在操作文件之前要打开文件。

打开文件——open(‘file‘[,‘mode‘])  

>>>import os
>>> os.getcwd()
‘c:\\‘
>>> file=open(‘test.txt‘)   #默认的mode是‘r‘,即读模式
>>> file.read()  #读取文件内容
‘hello\nworld\nhello,python‘   #  \n在文件中的形式是换行
mode的选项即含义如下:

模 式

描述

r

以读方式打开文件,可读取文件信息。

w

以写方式打开文件,可向文件写入信息。如文件存在,则清空该文件,再写入新内容;如果文件不存在则创建

a

以追加模式打开文件(即一打开文件,文件指针自动移到文件末尾),如果文件不存在则创建
r+

以读写方式打开文件,可对文件进行读和写操作。

w+

消除文件内容,然后以读写方式打开文件。

a+

以读写方式打开文件,并把文件指针移到文件尾。

b

以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

关于文件的其他操作我觉得没必要记录的很详细了,因为基本都很简单,下面列出的是文件的常用方法,并且在例子中有相关说明。另外有一点注意的是读取文件中经常存在的编码问题。不同的解释器默认的编码不同,具体解决方案会再介绍。

常见文件操作方法:

方法

描述

f.close()

关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。

f.name()

获取文件名称

f.next()

返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

f.fileno()

获得文件描述符,是一个数字。返回一个长整型的”文件标签“

f.flush()

刷新输出缓存,把缓冲区的内容写入硬盘

f.isatty()

如果文件是一个终端设备文件(Linux系统中),则返回True,否则返回False。

f.read([size])

读出文件,size为读取的长度,以byte为单位

f.readline([size])

读出一行信息,若定义了size,则读出 一行的一部分

f.readlines([size])

读出所有行,也就是读出整个文件的信息。(把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分)

f.seek(offset[,where])

把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。(注意:如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾)

f.tell()

获得文件指针位置,标记当前位置,以文件开头为原点

f.truncate([size])

把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

f.write(string)

把string字符串写入文件,write()不会在str后加上一个换行符。

f.writelines(list)

把list中的字符串一行一行地写入文件,是连续写入文件,没有换行。

现有一个test.txt文件,格式如下:

hello
world
hello
python
下面是一些常见操作:

>>> file=open(‘test.txt‘)
>>> file.read (4)  #读取前4个字节
‘hell‘
>>> file.read(6)  #注意这里是在刚才读过的基础上再向后读的
‘o\nworl‘
>>> file.read ()  #不指定size,则读到文件结尾
‘d\nhello\npython‘
>>> file.read()  #再读时已是文件结尾
‘‘
>>> file.seek(0)  #将文件位置定位到第一个字节
>>> file.readline ()  #一次读一行
‘hello\n‘
>>> file.readline ()
‘world\n‘
>>> file.seek(0)   #将文件定位到开始
>>> file.readlines ()   #读取整个文件的内容
[‘hello\n‘, ‘world\n‘, ‘hello\n‘, ‘python‘]
>>> file .tell() #读完之后显示seek位置,即文件的最后了
27L   #以长整型表示
>>> file.name   #查看文件的名称
‘test.txt‘
>>> file.close() #关闭文件

  刚开始测试read和readline等用法的时候,因为只要读取一次就在上次基础上往后读,当时我还以为这是一个出栈操作,显然,知道有seek这个方法后,我才知道它不是,只是每次读的时候seek的位置就往后移动一个,而每次读取是以seek所在的位置为起点的。所以如果需要从头开始读取文件内容时,将文件位置设为开始即可,即seek(0)。

>>> file=open(‘test.txt‘,‘w‘)
>>> file.write (‘\nwelcome‘)  #会将之前的内容覆盖
>>> file.writelines (‘I love python‘)
>>> file.close ()  #关闭文件时才能看到文件内容的修改
>>> file=open(‘test.txt‘,‘a‘)  #追加到文件尾,而不会覆盖
>>> file.writelines (‘this is a test‘)
>>> file.close()
对文件的相关操作有时需要引入shutil模块:

>>> import shutil
>>> shutil.copyfile(‘test.txt‘,‘123.txt‘)  #参数只能是文件
>>> shutil.copy("olddir","newfileordir")    #olddir只能是文件夹,newfile可以是文件,也可以是目标目录
>>> shutil.copytree("olddir","newdir")     #olddir和newdir都只能是目录,且newdir必须不存在
>>> shutil.move("oldpos","newpos")  #移动文件或目录
>>> shutil.rmtree("dir")    #空目录、有内容的目录都可以删

>>> import os
>>> os.rmdir("dir") #只能删除空目录
>>> os.remove("file") #删除文件
>>> os.rename("oldname","newname")  #文件或目录都是使用这条命令

文件编码:

#获得当前环境默认编码
>>> import sys
>>> import locale
>>> sys.getdefaultencoding() # 返回当前系统所使用的默认字符编码
‘ascii‘
>>> sys.getfilesystemencoding () # 返回用于转换Unicode文件名至系统文件名所使用的编码
‘mbcs‘
>>> locale.getdefaultlocale() # 获取默认的区域设置并返回元组(语言, 编码)
(‘zh_CN‘, ‘cp936‘)
>>> locale .getpreferredencoding () # 返回用户设定的文本数据编码
‘cp936‘

统计目录下文件个数
print len(sum([i[2] for i in os.walk(path)],[]))
时间: 2024-10-10 01:46:53

python 常用对linux系统文件及目录的操作的相关文章

Linux下的目录扫描操作函数使用实践

[文章摘要] 本文以实际的C源程序为例子,介绍了Linux下的目录扫描函数(scandir)的使用方法,为相关开发工作的开展提供了有益的参考. [关键词] C语言  Linux  目录扫描  makefile  scandir 一.scandir命令简介 scandir函数的声明为: int scandir(const char *dir, structdirent ***namelist, int (*filter) (const void *b), int ( * compare )( co

umask下设置linux系统文件与目录的默认权限

umask指定目前用户在新建文件或者目录时候的权限默认值,用户可直接使用umask指令查看当前系统文件和目录的默认权限: [[email protected] ~]# umask     0022 [[email protected] ~]# touch test-1      [[email protected] ~]# mkdir test-11      [[email protected] ~]# ll       total 8      -rw-r--r--. 1 root root

工作中常用的Linux命令:目录

工作两三年,每天都和Linux打交道,但每每使用Linux命令的时候却会像提笔忘字般不知如何使用,常常查手册或到网上找资料.此系列文章主要是为了方便自己在使用命令时随时可查阅.鄙人才疏学浅,文中若有任何错误可在留言中指正,以供大家共同进步.学习的主要参考资料: 1. <Unix环境高级编程>.<shell脚本学习指南>... 2. 我使用过的Linux命令系列 3. 每天一个Linux命令 4. 网上的其他资料 1. 工作中常用的Linux命令(1):find命令 2. 工作中常用

Linux基础系列(三)Linux系统文件和目录重要知识

详细解释图: 第一列 Inode详解 第二列 文件类型及权限 第三列 硬链接数 第四五列 属主及所归属得组 第六列 文件或目录的大小 第七八九列 最近修改时间 第十列 文件或目录名字 inode详解 block是用来存储实际数据 inode用来存储文件属性 inode不包含文件名 文件在上一级目录的block里 block小结 磁盘读取数据是按Block为单位读取的. 一个文件可能占用多个Block.每读取一个Block就会消耗一次磁盘I/O. 如果要提升磁盘I/O性能,那么就要尽可能一次性读取

Linux系统文件与目录练习题

一.复制/etc/skel目录为/home/tuser1(/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限). 二.编辑/etc/group文件,添加组hadoop. 三.手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号:其家目录为/home/hadoop. 四.复制/etc/skel目录为/home/hadoop(修改hadoop目录的属组和其它用户没有任何访问权限). 五.修改/home/hadoop目录及其内部所有

5.Linux文件和目录相关操作

一.目录管理:        cd, pwd, ls  都是来查看目录的 mkdir: make directory  创建目录            -p: 当指定的目标目录的父目录不存在时,则先创建之            -p, --parents              no error if existing, make parent directories as needed      -v, --verbose              print a message for e

常用的文件文件夹目录的操作函数

BuildPath() 生成一个文件路径 CopyFile() 复制文件 CopyFolder() 复制目录 CreateFolder() 创建新目录 CreateTextFile() 生成一个文件 DeleteFile() 删除一个文件 DeleteFolder() 删除一个目录 DriveExists() 检验盘符是否存在 Drives 返回盘符的集合 FileExists() 检验文件是否存在 FolderExists 检验一个目录是否存在 GetAbsolutePathName() 取得

linux指令(目录类操作指令)

pwd 显示当前所在的工作目录 cd 目标目录    例如cd  /boot/grub 从当前目录切换到某个目录 cd  切换到根目录 cd.. 切换到当前目录的上层目录 ls  显示当前目录下的内容 ls [选项] 目录或文件 ls -l /etc/passwd     显示etc/passwd 文件下的详细信息 ls -ld /root  显示当前目录下的详细信息 -a 显示全部的文件及内容 -l 以长格式详细的方式来显示 -h  以人性化的方式显示(加入文件或目录大小的单位) -d 显示目

日常工作中常用的Linux命令

以下Linux命令是我日常工作中常用到的: sudo su - :切换为临时的root权限; chmod +x * :用于改变linux系统文件或目录的访问权限; ps -ef |grep dubbo-account :查看进程; ./ shutdown.sh : 关闭某个服务; tar -zxf nginx-1.6.tar.gz: 解压; less all.log : 查看当天的日志; tail -f all.log: 监控日志; ls -lh: 查看各个文件的大小; sz all.log: