2018年4月12日--python文件操作和OS模块

文件操作和OS模块

声明:参考菜鸟教程作笔记 http://www.runoob.com/python3/python3-tutorial.html

文件的打开与关闭

  • open()打开文件;close()关闭文件。打开文件必须要关闭文件,所以open()和close()为成对使用。
  • open()参数意思。
访问 模式说 明
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

读取文件

f = open("F:/01.txt", "r")      # 读取一个文件
for i in f.readlines():         # 遍历文件的每一行
    print(i, end="")            # 输出每行的内容。因为每行结尾是\n换行符。所以不需要输出换行。
f.close()                       # 关闭文件

写入文件

f = open("F:/01.txt", "w")      # 打开或创建一个文件
f.write('你好')                 # 写入内容
f.close()                       # 关闭文件
f = open("F:/01.txt", "r")      # 读取一个文件
for i in f.readlines():         # 遍历文件的每一行
    print(i, end="")            # 输出每行的内容。因为每行结尾是\n换行符。所以不需要输出换行。
f.close()                       # 关闭文件

打开文件自动关闭方法

with open('F:/01.txt','r', encoding='utf-8') as f:
    for i in f.readlines():
        print(i, end="")

读写文件设置制定编码

  • 加入encoding参数
open("F:/01.txt", "w", encoding='utf-8') 

Python3 File(文件) 方法

# 01.txt文件内容
这是第一行
这是第二行
这是第三行
这是第四行
这是第五行

1、close()

  • close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
  • 当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。
    fileObject.close()

    实例

    f= open("F:/01.txt", "r", encoding='utf-8')
    print("文件名是:{0}".format(f.name))
    f.close()

2、flush()

  • flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
  • 一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
    fileObject.flush()

    实例

    f= open("F:/01.txt", "r", encoding='utf-8')
    print("文件名是:{0}".format(f.name))
    f.flush()
    f.close()

3、fileno()

  • fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
    fileObject.fileno()

    实例

    f= open("F:/01.txt", "r", encoding='utf-8')
    print("文件名是:{0}".format(f.name))
    fid = f.fileno()
    print ("文件描述符为:{0}".format(fid))
    f.close()

4、isatty()

  • isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。
    fileObject.isatty()

    实例

    f= open("F:/01.txt", "r", encoding='utf-8')
    ret = f.isatty()
    print ("返回值:{0}".format(ret))
    f.close()

5、next()

  • Python 3 中的 File 对象不支持 next() 方法。 Python 3 的内置函数 next() 通过迭代器调用 __next__() 方法返回下一项。 在循环中,next()方法会在每次循环中调用,该方法返回文件的下一行,如果到达结尾(EOF),则触发 StopIteration
    next(iterator[,default])

    实例

    f= open("F:/01.txt", "r", encoding='gbk')
    for index in range(5):
        line = next(f)
        print ("第{0}行 - {1}".format(index, line), end="")
    f.close()

6、read()

  • read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有。
    fileObject.read()

    实例

    f= open("F:/01.txt", "r", encoding='gbk')
    line = f.read(10)
    print ("读取字符串:{0}".format(line))    #换行符占一个位
    f.close()

7、readline()

  • readline() 方法用于从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符。
    fileObject.readline()

    实例

    f= open("F:/01.txt", "r")
    line = f.readline()
    print ("读取第一行:{0}".format(line))
    line = f.readline(4)
    print ("读取第二次:{0}".format(line))
    f.close()

8、readlines()

  • readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。
  • 如果碰到结束符 EOF 则返回空字符串。
    fileObject.readlines( )

    实例

    f= open("F:/01.txt", "r")
    for line in f.readlines():                          #依次读取每行
        line = line.strip()                             #去掉每行头尾空白
        print ("读取的数据为:{0}".format(line))
    f.close()

9、seek()

  • seek() 方法用于移动文件读取指针到指定位置。
  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
  • fileObject.seek(offset[, whence])

    实例

    f= open("F:/01.txt", "r")
    line = f.read()
    print ("读取的数据为:{0}".format(line))
    f.seek(6, 0)
    red = f.read()
    print ("再次读取的数据为:{0}".format(line))
    f.close()

10、tell()

  • tell() 方法返回文件的当前位置,即文件指针当前位置。
    fileObject.tell(offset[, whence])

    实例

    f= open("F:/01.txt", "r")
    line = f.readline()
    print ("读取的数据为:{0}".format(line))
    pos = f.tell()
    print ("当前位置:{0}".format(pos))
    f.close()

11、truncate()

  • truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
    fileObject.truncate( [ size ])

    实例

    f= open("F:/01.txt", "r+")
    f.truncate(8)
    line = f.read()
    print ("再次读取行:{0}".format(line))
    f.close()

12、write()

  • write() 方法用于向文件中写入指定字符串。
  • 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
    fileObject.write( [ str ])

    实例

    f= open("F:/01.txt", "r+")
    f.seek(0, 2)        # 内容写末尾
    f.write("\n这是新的一行")
    f.seek(0, 0)        # 从头读取文件
    line = f.readlines()
    print ("读取:{0}".format(line))
    f.close()

13、writelines()

  • writelines() 方法用于向文件中写入一序列的字符串。
  • 这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
  • 换行需要制定换行符 \n。
    fileObject.writelines( [ str ])

    实例

    f= open("F:/01.txt", "w")
    seq = ['第一个\n', '第二个']
    f.writelines(seq)
    f.close()

     

Python3 OS 文件/目录方法

1、os.access()

  • os.access() 方法使用当前的uid/gid尝试访问路径。大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/sgid 环境尝试。
  • path -- 要用来检测是否有访问权限的路径。
  • mode -- mode为F_OK,测试存在的路径,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。
    •  os.F_OK: 作为access()的mode参数,测试path是否存在。
    •  os.R_OK: 包含在access()的mode参数中 , 测试path是否可读。
    •  os.W_OK 包含在access()的mode参数中 , 测试path是否可写。
    •  os.X_OK 包含在access()的mode参数中 ,测试path是否可执行。
  • os.access(path, mode);

    实例

    import os
    ret = os.access("f:/01.txt", os.F_OK)
    print("F_OK值为:{0}".format(ret))
    ret = os.access("f:/01.txt", os.R_OK)
    print("R_OK值为:{0}".format(ret))
    ret = os.access("f:/01.txt", os.W_OK)
    print("W_OK值为:{0}".format(ret))
    ret = os.access("f:/01.txt", os.X_OK)
    print("X_OK值为:{0}".format(ret))

2、os.chdir()

  • os.chdir() 方法用于改变当前工作目录到指定的路径。
    os.chdir(path)

    实例

    path = "e:/"
    rl = os.getcwd()
    print("当前工作目录:{0}".format(rl))
    os.chdir(path)
    rl = os.getcwd()
    print("操作后工作目录:{0}".format(rl))

3、os.chflags()

  • os.chflags() 方法用于设置路径的标记为数字标记。多个标记可以使用 OR 来组合起来。
  • 只支持在 Unix 下使用。
  • path -- 文件名路径或目录路径。
  • flags -- 可以是以下值:
    • stat.UF_NODUMP: 非转储文件
    • stat.UF_IMMUTABLE: 文件是只读的
    • stat.UF_APPEND: 文件只能追加内容
    • stat.UF_NOUNLINK: 文件不可删除
    • stat.UF_OPAQUE: 目录不透明,需要通过联合堆栈查看
    • stat.SF_ARCHIVED: 可存档文件(超级用户可设)
    • stat.SF_IMMUTABLE: 文件是只读的(超级用户可设)
    • stat.SF_APPEND: 文件只能追加内容(超级用户可设)
    • stat.SF_NOUNLINK: 文件不可删除(超级用户可设)
    • stat.SF_SNAPSHOT: 快照文件(超级用户可设)
      os.chflags(path, flags)

      实例

      import os,stat
      path = "/01.txt"
      # 为文件设置标记,使得它不能被重命名和删除
      fl = stat.SF_NOUNLINK
      rl = os.chflags( path, fl )
      print("返回值:{0}".format(rl))

 

4、os.chmod()

  • os.chmod() 方法用于更改文件或目录的权限。
  • Unix 系统可用。
  • path -- 文件名路径或目录路径。
  • flags -- 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。
    • stat.S_IXOTH: 其他用户有执行权0o001
    • stat.S_IWOTH: 其他用户有写权限0o002
    • stat.S_IROTH: 其他用户有读权限0o004
    • stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
    • stat.S_IXGRP: 组用户有执行权限0o010
    • stat.S_IWGRP: 组用户有写权限0o020
    • stat.S_IRGRP: 组用户有读权限0o040
    • stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
    • stat.S_IXUSR: 拥有者具有执行权限0o100
    • stat.S_IWUSR: 拥有者具有写权限0o200
    • stat.S_IRUSR: 拥有者具有读权限0o400
    • stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
    • stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
    • stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
    • stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
    • stat.S_IREAD: windows下设为只读
    • stat.S_IWRITE: windows下取消只读
      os.chmod(path, mode)

      实例

      import os, sys, stat
      # 假定 /01.txt 文件存在,设置文件可以通过用户组执行
      os.chmod("/01.txt", stat.S_IXGRP)
      # 设置文件可以被其他用户写入
      os.chmod("/01.txt", stat.S_IWOTH)
      print ("修改成功!!")

5、os.chown()

  • os.chown() 方法用于更改文件所有者,如果不修改可以设置为 -1, 你需要超级用户权限来执行权限修改操作。
  • 只支持在 Unix 下使用。
  • path -- 设置权限的文件路径

  •  

    uid -- 所属用户 ID
  • gid -- 所属用户组 ID

    os.chown(path, uid, gid)

    实例

    import os, sys
    # 设置所有者 ID 为 1000
    os.chown("/01.txt", 1000, -1)
    print ("修改权限成功!!")

6、os.chroot() 

  • os.chroot() 方法用于更改当前进程的根目录为指定的目录,使用该函数需要管理员权限。
  • 在 unix 中有效。
    os.chroot(path)

    实例

    import os, sys
    # 设置根目录为 /tmp
    os.chroot("/tmp")
    print ("修改根目录成功!!")

7、os.close()

  • os.close() 方法用于关闭指定的文件描述符 fd。
  • fd -- 文件描述符。
    os.close(fd)

    实例

    import os, sys
    # 打开文件
    fd = os.open( "01.txt", os.O_RDWR|os.O_CREAT )
    #  写入字符串
    os.write(fd, "This is test")
    # 关闭文件
    os.close( fd )
    print ("关闭文件成功!!")

8、os.closerange()

  • os.closerange() 方法用于关闭所有文件描述符 fd,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略。
  • fd_low -- 最小文件描述符
  • fd_high -- 最大文件描述符
    os.closerange(fd_low, fd_high)
    
    # 该方法类似于:
    for fd in xrange(fd_low, fd_high):
        try:
            os.close(fd)
        except OSError:
            pass

    实例

    import os, sys
    # 打开文件
    fd = os.open( "01.txt", os.O_RDWR|os.O_CREAT )
    # 写入字符串
    os.write(fd, "This is test")
    # 关闭文件
    os.closerange( fd, fd)
    print ("关闭文件成功!!")

 

9、os.dup()

  • os.dup() 方法用于复制文件描述符 fd。
  • fd -- 文件描述符
    os.dup(fd)

    实例

    import os, sys
    # 打开文件
    fd = os.open( "01.txt", os.O_RDWR|os.O_CREAT )
    # 复制文件描述符
    d_fd = os.dup( fd )
    # 使用复制的文件描述符写入文件
    os.write(d_fd, "This is test".encode())
    # 关闭文件
    os.closerange( fd, d_fd)
    print ("关闭所有文件成功!!")

10、os.dup2()

  • os.dup2() 方法用于将一个文件描述符 fd 复制到另一个 fd2。
  • Unix, Windows 上可用。
  • fd -- 要被复制的文件描述符
  • fd2 -- 复制的文件描述符
    os.dup2(fd, fd2)

    实例

    import os
    # 打开一个文件
    f=open('txt','a')
    # 将这个文件描述符代表的文件,传递给 1 描述符指向的文件(也就是 stdout)
    os.dup2(f.fileno(), 1)
    # 关闭文件
    f.close()
    # print 输出到标准输出流,就是文件描述符1
    print('long')
    print('xxxx')

 

11、os.fchdir()

  • os.fchdir() 方法通过文件描述符改变当前工作目录。
  • Unix, Windows 上可用。
  • fd -- 文件描述符
    os.fchdir(fd)

    实例

    import os, sys
    # 首先到目录 "/etc/sysconfig/network-scripts" 
    os.chdir("/etc/sysconfig/network-scripts" )
    # 输出当前目录
    print ("当前工作目录为 : %s" % os.getcwd())
    # 打开新目录 "/tmp"
    fd = os.open( "/tmp", os.O_RDONLY )
    # 使用 os.fchdir() 方法修改到新目录
    os.fchdir(fd)
    # 输出当前目录
    print ("当前工作目录为 : %s" % os.getcwd())
    # 关闭打开的目录
    os.close( fd )

12、

13、

14、

15、

16、

17、

18、

19、

20、

21、

22、

23、

24、

25、

26、

27、

28、

29、

30、

31、

32、

33、

34、

35、

36、

37、

38、

39、

40、

41、

42、

43、

44、

45、

46、

47、

48、

49、

50、

51、

52、

53、

54、

55、

 

转载于:https://www.cnblogs.com/ksqinglong/p/8823829.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值