zoukankan      html  css  js  c++  java
  • Python用法速查@文件操作

    文本文件

    os.path.exists('path/file.txt')

    >>>os.path.exists("C://ArcMentalTest//config.txt")
    True
    

    f=open(path, mode)

    data=f.read()

    r
    w
    a 追加
    b 二进制
    + 读/写
    try:
        f = open('/path/to/file', 'r')    # 打开文件
        data = f.read()                   # 读取文件内容
    finally:
        if f:
            f.close()                     # 确保文件被关闭
    
    
    

    with open(path, mode)

    with open('/path/to/file', 'r') as f: #会自动关闭文件
        data = f.read()
    
    

    f.read(1024)

    适用于文件较大的情况,如10G不想一次性读完

    with open('path/to/file', 'r') as f:
        while True:
            piece = f.read(1024)        # 每次读取 1024 个字节(即 1 KB)的内容
            if not piece:
                break
            print piece
    
    

    yield data

    def read_in_chunks(file_object, chunk_size=1024):
        """
    	Lazy function (generator) to read a file piece by piece.
        Default chunk size: 1k.
    	"""
    	
        while True:
            data = file_object.read(chunk_size)
            if not data:
                break
            yield data    #可多次返回数据
    
    with open('path/to/file', 'r') as f:
        for piece in read_in_chunks(f):
            print piece
    
    

    f.readline()

    with open('data.txt', 'r') as f:
        while True:
            line = f.readline()     # 逐行读取
            if not line:
                break
            print line,             # 这里加了 ',' 是为了避免 print 自动换行
    
    

    f.readlines()

    file.txt
    -------------------------
    This a test .
    a file named file.txt
    txt is the expend name...
    -------------------------
    with open('./file.txt', 'r') as f:
        line = f.readline()
        print(line)
    -------------------------
    This a test .
    
    file.txt
    -------------------------
    10  1   9   9
    6   3   2   8
    20  10  3   23
    1   4   1   10
    10  8   6   3
    10  2   1   6
    -------------------------
    with open('data.txt', 'r') as f:
        lines = f.readlines() #按行读生成字符串列表
        line_num = len(lines)
        print lines
        print line_num
    ------------------------
    ['10	1	9	9
    ', '6	3	2	8
    ', '20	10	3	23
    ', '1	4	1	10
    ', '10	8	6	3
    ', '10	2	1	6']
    6
    
    
    file.txt
    -------------------------
    This a test .
    a file named file.txt
    txt is the expend name...
    -------------------------
    with open('./file.txt', 'r') as f:
        lines = f.readlines()
        print(lines)
    
    ['This a test .
    ', 'a file named file.txt
    ', 'txt is the expend name...']
    
    
    

    for line in f:...迭代器

    with open('data.txt', 'r') as f:
        for line in f:
            print line,
    -------------------------------
    10  1   9   9
    6   3   2   8
    20  10  3   23
    1   4   1   10
    10  8   6   3
    10  2   1   6
    
    with open(file_path, 'r') as f:
        lines = list(f)
        print lines
    ------------------------------
    
    ['10	1	9	9
    ', '6	3	2	8
    ', '20	10	3	23
    ', '1	4	1	10
    ', '10	8	6	3
    ', '10	2	1	6']
    
    

    f.write('message ')

    with open('/Users/ethan/data2.txt', 'w') as f:
        f.write('one
    ') #覆盖写,文件不存在则创建
        f.write('two')
    
    
    with open('/Users/ethan/data2.txt', 'a') as f: #追加写
        f.write('three
    ')
        f.write('four')
    
    

    二进制文件

    with open(path, 'rb') as f:...

    f.read()

    
    with open('./image/plain.png', 'rb') as f:
        bs = f.read() #生成字节字符串
        print(bs)
    
    #结果
    b'x89PNG
    x1a
    x00x00x00
    IHDRx00x00x00xcex00x00x00xc8x08x06x00x00x00xa0Fxdexd9x00x00	xb6IDATxx9cxedxddAkx1bxcdx1dxc7qxbdx04xbfx82xd5x84x1eJz(x82\J!`zxf1xd59...x00x00x00x00x00x00x00x00x00x00x00x000xbbxfex0fxebx04xd6xd6xd5]xb9xe3x00x00x00x00IENDxaeB`x82'
    
    
    

    data=base64.b64encode(byte_data)

    import base64
    with open('./image/plain.png', 'rb') as f:
        bs = f.read()
        data_64 = base64.b64encode(bs) #对字节字符串进行base64编码
        print(data_64)
    	
    #结果
    b'iVBORw0KGgoAAAANSUhEUgAAAM4AAADICAYAAACgRt7ZAAAJtklEQVR4nO3dQWsbzR3Hcb0Ev4LVhB5KeiiCXEohYHrx1Tn18FDwJZenF9OjT6I80u4DT+xC4MGEFptATSkpgfDg0l5Wz+E5+WD8XAKWRls/kXkcJa1MmtakwUwPkv04sXdm15rZ2bW+H5irLK33tzszO...AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwu/4P6wTW1tVdueMAAAAASUVORK5CYII='
    
    

    with open(path, 'wb') as f:...

    f.write(byte_data)

    with open('test.png', 'rb') as f:
        image_data = f.read()
    
    with open('/Users/ethan/test2.png', 'wb') as f:
        f.write(image_data)
    
    

    操作系统OS模块

    os.mkdir 创建目录
    os.rmdir 删除目录
    os.rename 重命名
    os.remove 删除文件
    os.getcwd 获取当前工作路径
    os.walk 遍历目录
    os.path.join 连接目录与文件名
    os.path.split 分割文件名与目录
    os.path.abspath 获取绝对路径
    os.path.dirname 获取路径
    os.path.basename 获取文件名或文件夹名
    os.path.splitext 分离文件名与扩展名
    os.path.isfile 判断给出的路径是否是一个文件
    os.path.isdir 判断给出的路径是否是一个目录

    os.path.abspath(dir_name/file_name)

    $ pwd
    /Users/ethan/coding/python
    $ python
    >>> import os                          # 记得导入 os 模块
    >>> os.path.abspath('hello.py')        # 获取文件绝对路径
    '/Users/ethan/coding/python/hello.py'
    >>> os.path.abspath('web')
    '/Users/ethan/coding/python/web'
    >>> os.path.abspath('.')                # 当前目录的绝对路径
    '/Users/ethan/coding/python'
    
    

    os.path.dirname(dirXpath/fileXpath)

    >>> os.path.dirname('/Users/ethan/coding/python/hello.py')#获取文件路径
    '/Users/ethan/coding/python'
    >>> os.path.dirname('/Users/ethan/coding/python/')#获取文件夹路径
    '/Users/ethan/coding/python'
    >>> os.path.dirname('/Users/ethan/coding/python')
    '/Users/ethan/coding'
    
    

    os.path.basename(Xpath)

    >>> os.path.basename('/Users/ethan/coding/python/hello.py')#获取文件名
    'hello.py'
    >>> os.path.basename('/Users/ethan/coding/python/')#获取文件夹名
    ''
    >>> os.path.basename('/Users/ethan/coding/python')
    'python'
    
    

    os.path.splitext(Xpath)

    >>> os.path.splitext('/Users/ethan/coding/python/hello.py')#分割文件名和扩展名
    ('/Users/ethan/coding/python/hello', '.py')
    >>> os.path.splitext('/Users/ethan/coding/python')
    ('/Users/ethan/coding/python', '')
    >>> os.path.splitext('/Users/ethan/coding/python/')
    ('/Users/ethan/coding/python/', '')
    
    

    os.path.split(Xpath)

    >>> os.path.split('/Users/ethan/coding/python/hello.py')#分离目录和文件名
    ('/Users/ethan/coding/python', 'hello.py')
    >>> os.path.split('/Users/ethan/coding/python/')
    ('/Users/ethan/coding/python', '')
    >>> os.path.split('/Users/ethan/coding/python')
    ('/Users/ethan/coding', 'python')
    
    

    os.path.isfile(Xpath)

    os.path.isdir(Xpath)

    >>> os.path.isfile('/Users/ethan/coding/python/hello.py')#判断是否为文件
    True
    >>> os.path.isdir('/Users/ethan/coding/python/')#是否为目录
    True
    >>> os.path.isdir('/Users/ethan/coding/python')
    True
    >>> os.path.isdir('/Users/ethan/coding/python/hello.py')
    False
    
    

    for xpath, dirname, filename in os.walk(Xpath):...

    >>> for root, dirs, files in os.walk('/Users/ethan/coding'):
    ...     print root
    ...     print dirs
    ...     print files
    ...
    /Users/ethan/coding #绝对路径
    ['python']          #文件夹
    []                  #文件
    /Users/ethan/coding/python
    ['web2']
    ['hello.py']
    /Users/ethan/coding/python/web2
    []
    []
    ---------------------------------------------
    import os
    for root, dirs, files in os.walk("E://PYTHON//Basics//Fun", topdown=True):
        print(root)
        print(dirs)
        print(files)
    #结果
    D:pythonpython.exe E:/PYTHON/Basics/Fun/HelloYoutube.py
    E://PYTHON//Basics//Fun
    ['.idea', 'image', '__pycache__']
    ['Ball.py', 'Calculator.py', 'Editor.py', 'file.txt', 'HelloYoutube.py', 'tttGame.py']
    E://PYTHON//Basics//Fun.idea
    ['inspectionProfiles']
    ['Fun.iml', 'misc.xml', 'modules.xml', 'workspace.xml']
    E://PYTHON//Basics//Fun.ideainspectionProfiles
    []
    ['profiles_settings.xml']
    E://PYTHON//Basics//Funimage
    []
    ['airship.png', 'city.png', 'cold.png', 'exit.png', 'hot.png', 'icon_love.png', 'lo.gif', 'open.png', 'plain.png', 'save.png']
    E://PYTHON//Basics//Fun\__pycache__
    []
    ['Ball.cpython-39.pyc']
    
    Process finished with exit code 0
    -----------------------------------------
    import os
    for root, dirs, files in os.walk("E://PYTHON//Basics//Fun", topdown=False):
        for name in files:
            print(os.path.join(root, name))
        for name in dirs:
            print(os.path.join(root, name))
    
    #结果
    
    D:pythonpython.exe E:/PYTHON/Basics/Fun/HelloYoutube.py
    E://PYTHON//Basics//Fun.ideainspectionProfilesprofiles_settings.xml
    E://PYTHON//Basics//Fun.ideaFun.iml
    E://PYTHON//Basics//Fun.ideamisc.xml
    E://PYTHON//Basics//Fun.ideamodules.xml
    E://PYTHON//Basics//Fun.ideaworkspace.xml
    E://PYTHON//Basics//Fun.ideainspectionProfiles
    E://PYTHON//Basics//Funimageairship.png
    E://PYTHON//Basics//Funimagecity.png
    E://PYTHON//Basics//Funimagecold.png
    E://PYTHON//Basics//Funimageexit.png
    E://PYTHON//Basics//Funimagehot.png
    E://PYTHON//Basics//Funimageicon_love.png
    E://PYTHON//Basics//Funimagelo.gif
    E://PYTHON//Basics//Funimageopen.png
    E://PYTHON//Basics//Funimageplain.png
    E://PYTHON//Basics//Funimagesave.png
    E://PYTHON//Basics//Fun\__pycache__Ball.cpython-39.pyc
    E://PYTHON//Basics//FunBall.py
    E://PYTHON//Basics//FunCalculator.py
    E://PYTHON//Basics//FunEditor.py
    E://PYTHON//Basics//Funfile.txt
    E://PYTHON//Basics//FunHelloYoutube.py
    E://PYTHON//Basics//Fun	ttGame.py
    E://PYTHON//Basics//Fun.idea
    E://PYTHON//Basics//Funimage
    E://PYTHON//Basics//Fun\__pycache__
    
    Process finished with exit code 0
    
    

    参考

    explore-python/File-Dirctory


    ________________________________________________________

    Every good deed you do will someday come back to you.

    Love you,love word !
  • 相关阅读:
    内部共享上网
    Harbor部署
    一、Gitlab安装
    Dockerfile
    DockerCompose
    二、Git
    nginx域名代理
    三、jenkins持续集成工具安装
    chrome对于“submit”关键字的保留
    insightface 提取人脸特征(超简洁)
  • 原文地址:https://www.cnblogs.com/hugboy/p/file_op.html
Copyright © 2011-2022 走看看