Python入门之文件操作

python文件操作

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。

读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

下面将介绍下在python下文件常见的读写操作:

1、文件读写操作:

  f = open("文件","模式"[,“编码”])  #打开文件

  f.read()等操作方法        #操作文件 

  f.close()            #关闭文件

  上面操作文件的方法比较繁琐,会经常忘记关闭文件;所以可以通过with语句来自动帮我们调用close()方法:

  with open('文件','模式'[,'编码']) as f:

    f.read()等操作方法

2、文件操作模式:

  常规模式:

    • r :只读模式;以读方式打开文件,只可读取文件信息,不能写入。
    • w:只写模式;不可读,文件不存在则创建;如文件存在,则清空该文件,再写入新内容。
    • a:追加模式;可读写,文件不存在则创建;如文件存在则在文件末尾追加新内容。

  '+'模式,表示可以同时读写某个文件:

    • r+:可读可写,不会创建不存在的文件。如果直接写文件,则从顶部开始写,覆盖相同字节数的内容,如果先读后写,则会在文件最后追加内容;或先写后读也会在文件最后追加内容。
      #先写后读文件
      #!/usr/bin/env python3
      
      import os
      
      
      with open("/tmp/file.txt","r+") as f:
          f.write("hello world!!\n")
          for i in f.readlines():
              print(i.strip())
      执行结果:
      [root@localhost tmp]# ./pytest20.py 
      hello world!!
      [root@localhost tmp]# ./pytest20.py 
      hello world!!
      hello world!!
      
      #先读后写文件
      #!/usr/bin/env python3
      
      import os
      
      
      with open("/tmp/file.txt","r+") as f:
          f.readline()
          f.write("hello world!!\n")
      os.system("cat /tmp/file.txt")
      执行结果:
      [root@localhost tmp]# ./pytest20.py 
      hello world!!
      [root@localhost tmp]# ./pytest20.py 
      hello world!!
      hello world!!
      [root@localhost tmp]# ./pytest20.py 
      hello world!!
      hello world!!
      hello world!!
      #直写文件
      #!/usr/bin/env python3
      
      import os
      
      print("文件原始内容:")
      os.system("cat /tmp/file.txt")
      print("\r")
      
      with open("/tmp/file.txt","r+") as f:
          f.write("hello world!!\n")
      
      print("文件修改后内容:")
      os.system("cat /tmp/file.txt")
      执行结果:
      文件原始内容:
      what fuck!!! Are you OK?
      
      文件修改后内容:
      hello world!!
      re you OK?
      View Code
    • w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建

    • a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建

  U模式:

    • 'U':表示在读取时,可以将\r\n自动转换为\n(与r或r+模式使用)

  b模式:

    • 'b':表示处理二进制文件(linux可忽略,windows处理二进制文件时需标注)

3、文件对象的操作方法:

  • f.read():读取文件所有内容;也可以读取指定多少个字符:f.read(num),num为指针
    #读取文件所有内容
    #!/usr/bin/env python3
    
    import os
    
    with open("/tmp/file.txt","r+") as f:
        print(f.read().strip())
    执行结果:
    [root@localhost tmp]# cat file.txt 
    hello world!!
    re you OK?
    [root@localhost tmp]# ./pytest20.py 
    hello world!!
    re you OK?
    
    #读取指定指针的字符
    #!/usr/bin/env python3
    
    import os
    with open("/tmp/file.txt","r+") as f:
        print(f.read(5))    #指针指向5,所以只读取5个字符
    执行结果:
    [root@localhost tmp]# cat file.txt 
    hello world!!
    re you OK?
    [root@localhost tmp]# ./pytest20.py 
    hello
    View Code
  • f.readline():读取一行内容
    #!/usr/bin/env python3
    
    with open("/tmp/file.txt","r") as f:
        print(f.readline().strip())
    执行结果:
    [root@localhost tmp]# cat file.txt 
    hello world!!
    re you OK?
    [root@localhost tmp]# ./pytest20.py 
    hello world!!

     

  • f.seel():指定文件中指针位置,读取文件时,指针前的内容将不会被显示
    #!/usr/bin/env python3
    
    with open("/tmp/file.txt","r") as f:
        f.seek(5)
        print(f.readline().strip())
    执行结果:
    [root@localhost tmp]# cat file.txt 
    hello world!!
    re you OK?
    [root@localhost tmp]# ./pytest20.py 
    world!!

     

  • f.tell():获取指针位置
    #!/usr/bin/env python3
    
    with open("/tmp/file.txt","r") as f:
        print(f.tell())
        print(f.readline().strip())
        print(f.tell())
    执行结果:
    [root@localhost tmp]# cat file.txt 
    hello world!!
    re you OK?
    [root@localhost tmp]# ./pytest20.py 
    0
    hello world!!
    1
  • f.truncate():截取指定大小的文件内容,仅保留指定之前数据(会写入源文件)
    #!/usr/bin/env python3
    
    with open("/tmp/test_file","r") as f:
        f.truncate(1024)    #截取1024字节即1K数据
    
    执行结果:
    [root@localhost tmp]# ls -lh test_file 
    -rw-r--r--. 1 root root 1.7K Jun 26 18:57 test_file
    [root@localhost tmp]# ./pytest20.py 
    [root@localhost tmp]# ls -lh test_file 
    -rw-r--r--. 1 root root 1.0K Jun 26 18:58 test_file
  • f.readable():判读文件是否可读
    #!/usr/bin/env python3
    
    with open("/tmp/test_file","r") as f:
        print(f.readable())
    
    
    with open("/tmp/test_file","w") as f:
        print(f.readable())
    执行结果:
    True    #返回True表示可读
    False   #返回False表示不可读
  • f.writeable():判读文件是否可写,同f.readable()判读方式差不多,这里不多介绍
  • f.write(str):将字符串str写入文件
    #!/usr/bin/env python3
    
    with open("/tmp/test_file","w") as f:
        f.write("hello linux!\nhello python!")
posted @ 2017-06-28 23:36  chengd  阅读(304)  评论(0)    收藏  举报