zoukankan      html  css  js  c++  java
  • python学习笔记八:文件与目录

    一、文件的打开和创建

    1、打开

    open(file,mode):

    >>>fo = open('test.txt', 'r')
    >>>fo.read()
    'hello
    '
    >>>fo.close()

    file(file,mode):

    >>>f = file('test.txt', 'r')
    >>>f.read()
    'hello
    '
    >>>f.close()

    mode可取值:

    2、创建

    用w/w+/a/a+模式打开即可。

    二、文件的读取

    1、String = FileObject.read([size])

    >>> fr = open('test.txt')
    >>> fr.read()
    'hello
    world
    '

    or:

    >>> for i in open('test.txt'):
    ...     print i
    ... 
    hello
    
    world

    2、String = FileObject.readline([size])

    >>> f = open('test.txt')
    >>> f.readline()
    'hello
    '
    >>> f.readline()
    'world
    '
    >>> f.readline()
    ''

    或者可以用next

    3、List = FileObject.readlines([size])

    >>> f = open('test.txt')
    >>> f.readlines()
    ['hello
    ', 'world
    ']

    三、文件的写入

    1、write(string)

    >>> f = open('test.txt', 'a')
    >>> f.write('hello
    world')
    
    #'hello
    world'

    2、writelines(list)

    >>> l = ['a','b','c']
    >>> f=open('test.txt','a')
    >>> f.writelines(l)
    
    #'hello
    worldabc'

    注:writelines相当于调用了多次write,不会自动添加换行( )符

    四、内容查找替换

     1、FileObject.seek(offset, mode)

    offset:偏移量

    mode:0表示将文件指针指向从文件头部到“偏移量”字节处,

               1表示将文件指针指向从文件当前位置向后移动“偏移量”字节,

               2表示将文件指针指向从文件尾部向前移动“偏移量”字节。

    >>> f=open('test.txt')
    >>> f.read()
    'hello
    worldabc'
    >>> f.read()
    ''
    >>> f.seek(0,0)
    >>> f.read()
    'hello
    worldabc'
    >>> f.close()

    2、flush:提交更新,即在文件关闭之前把内存中的内容强制写入文件(一般是文件关闭后写入)

    3、文件查找:遍历行进行查找

    #!/usr/bin/python
    import re
    
    search='hello world'
    file='test.txt'
    count = 0
    f = open(file)
    for l in f.readlines():
        li = re.findall(search,l)
        if len(li) > 0:
            count += len(li)
    print "Search " + str(count) + " "" + search + """
    f.close()

    4、文件内容替换:遍历行进行替换

     替换到新文件demo:

    #!/usr/bin/python
    
    os='hello'
    of='test.txt'
    
    rs='ten'
    rf='test2.txt'
    
    ofh = open(of)
    newl=[]
    for l in ofh.readlines():
        nl = l.replace(os,rs)
        newl.append(nl)
    
    rfh = open(rf,'w+')
    rfh.writelines(newl)
    ofh.close()
    rfh.close()

    替换到原文件demo:

    [server@localserver file]$ cat test.txt 
    abc
    hello
    world
    hello world
    helloworld
    hello hello world
    [server@localserver file]$ cat fr.py 
    #!/usr/bin/python
    
    os='hello'
    file='test.txt'
    
    rs='ten'
    
    f = open(file, 'r+')
    s=f.read()
    f.seek(0,0)
    f.close()
    f = open(file, 'w+')
    f.write(s.replace(os,rs))
    f.close()
    [server@localserver file] python fr.py
    [server@localserver file]$ cat test.txt 
    abc
    ten
    world
    ten world
    tenworld
    ten ten world

    这里采用了重建文件的办法。

    或用 fileinput 模块直接在原文件上修改:

    #!/usr/bin/python
    import fileinput
    
    os='hello'
    file='test.txt'
    
    rs='ten'
    
    for line in fileinput.input(file, inplace=True):
        print line.replace(os,rs).replace('
    ','')

    注意,这里删除了 是因为print时会写入换行。

    五、文件及目录操作

      一般是借助OS模块实现

    1、mkdir(path[,mode=0777]):创建目录,相当于mkdir

    >>>import os
    >>>os.mkdir('tt')

    2、makedirs(name[, mode=511]):创建多级目录,相当于mkdir -p

    3、rmdir(path):删除目录,相当于rm

    4、removedirs(path):删除多级目录,相当于rm -rf

    5、listdir(path):列出目录中文件和文件夹,相当于ls

    6、getcwd():获取当前路径,相当于pwd

    7、chdir(path):切换目录,相当于cd

    8、rename(src, dst):重命名

    9、shutil.copyfile(str,dst):复制文件(要引入shutil模块)

    10、path.splitext(filename):获取文件路径和扩展名

    >>> import os
    >>> fileName, fileExtension = os.path.splitext('/path/to/somefile.ext')
    >>> fileName
    '/path/to/somefile'
    >>> fileExtension
    '.ext'

    11、walk(top, topdown=True, onerror=None):遍历目录

    >>> import os
    >>> g = os.walk('a')
    >>> g.next()
    ('a', ['b'], [])
    >>> g.next()
    ('a/b', ['f', 'c'], [])
    >>> g.next()
    ('a/b/f', [], ['3.txt'])
    >>> g.next()
    ('a/b/c', ['d', 'e'], [])
    >>> g.next()
    ('a/b/c/d', [], ['1.txt'])
    >>> g.next()
    ('a/b/c/e', [], ['2.txt'])

    walk返回的是一个生成器,生成器中的内容是:当前目录,目录列表,文件列表

    python自己递归实现文件遍历:

    #!/usr/bin/python
    import os
    
    def dirList(path):
        filelist = os.listdir(path)
        fpath = os.getcwd()
        allfile = []
        for filename in filelist:
            filepath = os.path.abspath(os.path.join(path, filename))
            if os.path.isdir(filepath):
                allfile.extend(dirList(filepath))
            else:
                allfile.append(filepath)
        return allfile
    
    files = dirList('a')
    print files
  • 相关阅读:
    布尔值数据类型
    数据类型
    while循环。for循环
    对于元素类型为集合的List进行排序
    进程和线程之由来
    ExecutorService的关闭
    Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
    什么是设计模式
    java多线程的原子性
    OutputStream的flush()方法
  • 原文地址:https://www.cnblogs.com/lurenjiashuo/p/python-note-file-open-read-write-close.html
Copyright © 2011-2022 走看看