• Python复习笔记-字典和文件操作


    抽时间回顾2年前自己做过的python工具,突然感觉不像自己写的,看来好久没用过python的字典和文件操作了,查询资料和网页,整理如下:

    一、字典

    键值对的集合(map)

    字典是以大括号“{}”包围的数据集合

    与列表区别:字典是无序的,在字典中通过键来访问成员。

    字典是可变的,可以包含任何其他类型

    声明:

    Dic = {key1:value1,key2:value2}

    访问 Dic[key1]将得到value1

    常用字典操作:

    dic.keys()获得键的列表

    dic.values()获得值的列表

    dic.copy()复制字典

    dic.pop(k)删除键k ,若没有k,抛出KeyError的异常

    dic.get(k)获得键k的值

    dic.clear()清空字典

    dic.update()更新成员,若成员不存在,则加入

    dic.items()获得由键和值组成的列表

    可以通过

    >>>help(dict) 查看详情

    例子:

    dic= {'DZ':['13811111111','DZ@dzblog.com'],
    ... 'Alice':['13922222222','Alice@dzblog.com'],
    ... 'Joe':['13933333333','Joe@dzblog.com'],
    ... 'Paul':['13944444444','Paul@dzblog.com'],
    ... }

    获得键的值:

    >>> dic['DZ']
    ['13811111111', 'DZ@cnblogs.com']
    >>> dic.get('DZ')
    ['13811111111', 'DZ@cnblogs.com']
    #获得键的列表:
    >>> dic.keys() ['Paul', 'DZ', 'Alice', 'Joe']
    #获得值得列表:
    >>> dic.values() [['13944444444', 'Paul@cnblogs.com'], ['13811111111', 'DZ@cnblogs.com'], ['13922222222', 'Alice@cnblogs.com'], ['13933333333', 'Joe@cnblogs.com']]
    #获得由键值组成的列表:
    >>> dic.items() [('Paul', ['13944444444', 'Paul@cnblogs.com']), ('DZ', ['13811111111', 'DZ@cnblogs.com']), ('Alice', ['13922222222', 'Alice@cnblogs.com']), ('Joe', ['13933333333', 'Joe@cnblogs.com'])]

    #更新成员,若成员不存在,相当于加入,若存在则修改。

    >>> dic.update({'DZ':['13911111111','dzblog@cnblogs.com']})
    >>> dic
    {'Paul': ['13944444444', 'Paul@cnblogs.com'], 'DZ': ['13911111111', 'dzblog@cnblogs.com'], 'Alice': ['13922222222', 'Alice@cnblogs.com'], 'Joe': ['13933333333', 'Joe@cnblogs.com']}

    >>> dic.update({'Hawaii':['1xxxxxxx','xx@cnblogs.com']})
    >>> dic
    {'Hawaii': ['1xxxxxxx', 'xx@cnblogs.com'], 'Paul': ['13944444444', 'Paul@cnblogs.com'], 'DZ': ['13911111111', 'dzblog@cnblogs.com'], 'Alice': ['13922222222', 'Alice@cnblogs.com'], 'Joe': ['13933333333', 'Joe@cnblogs.com']}

    #删除成员

    >>> dic.pop('Hawaii')
    ['1xxxxxxx', 'xx@cnblogs.com']
    >>> dic
    {'Paul': ['13944444444', 'Paul@cnblogs.com'], 'DZ': ['13911111111', 'dzblog@cnblogs.com'], 'Alice': ['13922222222', 'Alice@cnblogs.com'], 'Joe': ['13933333333', 'Joe@cnblogs.com']}

    #复制字典和清空字典

    >>> dic2 = dic.copy()
    >>> dic2
    {'Paul': ['13944444444', 'Paul@cnblogs.com'], 'DZ': ['13911111111', 'dzblog@cnblogs.com'], 'Alice': ['13922222222', 'Alice@cnblogs.com'], 'Joe': ['13933333333', 'Joe@cnblogs.com']}
    >>> dic2.clear()
    >>> dic2
    {}

    note:若dic2 = dic,这时清空dic2,dic的数据也会被清空。若dic2=dic.copy(),这时清空dic2,dic的数据不会被清空。

    二:文件操作

    f = open(r'C:Movie est2.txt','w') #直接打开一个文件,如果文件不存在则创建文件,只能只用写命令

    f = open(r'C:Movie est2.txt')# 打开一个文件,只能只用读命令

    f.read([size]) #size为读取的长度,以byte为单位,如果不写则读取全部内容

    f.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分。每读取一次,文件操作符向下移动一行。

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

    关于open 模式:

    w     以写方式打开
    a     以追加模式打开
    r+     以读写模式打开
    w+     以读写模式打开 (参见 w )
    a+     以读写模式打开 (参见 a )
    rb     以二进制读模式打开
    wb     以二进制写模式打开 (参见 w )
    ab     以二进制追加模式打开 (参见 a )
    rb+    以二进制读写模式打开 (参见 r+ )
    wb+    以二进制读写模式打开 (参见 w+ )
    ab+    以二进制读写模式打开 (参见 a+ )

    f.write(“str”)  #把str写到文件中,write()方法不会在str后加上一个换行符

    f.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

    f.close() #关闭文件。在读命令或者写命令结束时,需要用关闭。如果文件关闭后依然操作,会抛出ValueError: I/O operation on closed file

    f.tell() #返回文件操作标记的当前位置,以文件的开头为起点

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

    fp.seek(offset[,whence])#将文件操作标记为移动到offset位置。

    >>> f = open(r'c:Movie	est.txt')
    >>> f.next()
    'This is the first line
    '
    >>> f.next()
    ' Second line
    '
    >>> f.readline()
    Traceback (most recent call last):
      File "<interactive input>", line 1, in <module>
    ValueError: Mixing iteration and read methods would lose data
    >>> f.next()
    ' third line
    '
    >>> f.seek(0)
    >>> f.readline()
    'This is the first line
    '
    >>> f.readlines()
    [' Second line
    ', ' third line
    ', ' end']

    三:目录操作

    创建单个目录:
    os.mkdir("test")
    创建多级目录:
    os.makedirs(r"c:Moive est.txt")
    复制文件:
    shutil.copyfile("oldfile","newfile")#oldfile和newfile都只能是文件
    shutil.copy("oldfile","newfile") # oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
    复制文件夹:
    shutil.copytree("olddir","newdir") #olddir和newdir都只能是目录,且newdir必须不存在
    重命名文件(目录)
    os.rename("oldname","newname") #文件或目录都是使用这条命令
    移动文件(目录)
    shutil.move("oldpos","newpos")   
    删除一个文件
    os.remove("file")
    删除多个目录:
    os.removedirs(r"c:python")
    删除目录
    os.rmdir("dir")只能删除空目录
    shutil.rmtree("dir")    空目录、有内容的目录都可以删
    转换目录
    os.chdir("path")   换路径

    检验给出的路径是否是一个文件:os.path.isfile() 返回true或false

    检验给出的路径是否是一个目录:os.path.isdir() 返回true或false

    检验给出的路径是否真地存:os.path.exists() 返回true或false

    返回一个路径的目录名和文件名:os.path.split() 

    >>> os.path.split(r"c:Movie	est.txt")
    ('c:\Movie', 'test.txt')

    返回指定目录下的所有文件和目录名:os.listdir()

    获取文件大小:os.path.getsize(filename)#得到的是字节(byte)

    处理路径的niubility方法 path = os.path.join(*self.directory)

    eg. filepath = os.path.join(directorypath,filename)  

    >>> os.path.join("c:","Movie","text.txt")
    'c:Movie\text.txt'
  • 相关阅读:
    [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面
    flex调用webservice中的datatable结果写入datagrid
    linux shell编程指南第十一章------------合并与分割2
    Java GUI使用exe4j打包exe文件
    最小生成树kruskal算法
    JQuery Datatable Ajax请求两次问题的解决
    其实我还好
    EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间
    hdu1151Air Raid
    UIWebview打开.txt文件中文乱码解决
  • 原文地址:https://www.cnblogs.com/dzblog/p/3656787.html
Copyright © 2020-2023  润新知