zoukankan      html  css  js  c++  java
  • python json处理、集合操作、函数定义、文件读写

    一.高效文件读写:

      当文件过大时,可以使用 for line in f: 的方式进行逐行读取,直接循环文件对象,每次循环的时候就是读取的每一行数据

                  line=line.strip() 去掉换行符

                  line=line.split(''')将每行数据以某个字符分割,分割完成后,转换成list数据

    二.文件操作: 

      1.为了减少磁盘和内存的交互次数,增加了数据缓冲区,当缓冲区中的数据写满时,才会将缓冲区中的数据写到磁盘当中

      f=open('111','w',encoding='utf-8')

      f.write(',')

      f.flush()#将缓冲区里边的数据立即写到磁盘上,不等缓冲区满

      f.close()

      2.与上边方法不同,文件的另一种打开方式为:

      with open('111','w',encoding='utf-8')as f1,open('222','r',encoding='utf-8') as f2:  #打开文件,不用再执行f.close,可打开多个文件

     3.文件修改方式:
      (1)简单粗暴的方式
    # 1.先获取到文件里的所有内容

    # 2.然后修改内容

    # 3.清空原先的所有内容
    #     4.重新写入  
      f=open('111','a+',encoding='utf-8')
      f.seek(0)
      data=f.read()
      new_data=data.replace('123','python')
      f.read(0) #read完以后指针到了最后
      f.truncate() #清空所有内容
      f.write(new_data)
      f.flush()
      f.close()
      (2)高效的处理方式
    # #word word——nwe
    # 1.先打开原来的文件,再打开一个空文件
    # 2.循环处理原来的文件里边的每一行数据,处理完成,生成新文件
    # 3.把原来的文件删除,把新文件的名字改成原来的名字
    import os
    with open('word',encoding='utf-8') as fr,open('.word','w',encoding='utf-8') as fw:
    for line in fr:
    line=line.lstrip() #去掉左边的空格
    if line: #判断这一行是否有数据
    line=line.replace('你','you') #替换数据
    fw.write(line) #写到新文件
    os.remove('word')
    os.rename('.word','word')

    三.集合
    集合的格式为:nums={1,2,3,4,1,1,1} 当print(nums)时,输出{1,2,3,4},集合有自动去重的功能,同时集合和字典一样也是无序的,所以不能支持下标(索引)取值
    for n in nums:
    print(n) 支持for循环取出每行数据

    定义空集合:null_set=set(),如果set={}则是定义了一个空字典

    list = [1,2,3,4,5,3,6]
    list_2 =[2,3,5,7,8]
    list=set(list)
    list_2 = set(list_2)
    print(list.intersection(list_2),'交集 ') #交集 取出重复数据 {2, 3, 5}
    print(list.union(list_2),'并集') # 并集 去重-统一展示 {1, 2, 3, 4, 5, 6, 7, 8}
    print(list.difference(list_2),'差集') #差集-取出list中有 list_2 没有 {1, 4, 6}
    list_3 = set([1,3,6])
    print(list_3.issubset(list)) #子集 list_3 的值在list 全有 全有时返回True,反之返回False
    print(list.issuperset(list_3)) #父集 list是list_3的父集时,返回True,反之返回False
    print(list.symmetric_difference(list_2)) # 对称差集 lsit 和 list_3 互相没有的  返回结果{1, 4, 6, 7, 8}  效果相当于,合并后去除重复的

    print(list & list_2) #交集
    print(list | list_2) # 并集
    print(list -list_2) #差集
    print(list ^ list_2) # 对称差集
    list.add(777) #一次添加一个
    list.update([888,999])#同时添加多个
    list.remove(999)#删除指定的,没有找到时报错
    list.pop()#随机删除一个
    list.discard(888) # 删除一个指定的,不存在时 不会报错

    四.json处理
    json是一个字符串,只不过长得像字典,json里边只能用双引号
    import json
    user_info='''
    {"aaa":"123456","aa":"123"}
    '''
    user_dic=json.loads(user_info) #把json串(字符串)转成字典
    stu_info={'laowang':{'cars':['BMW','BEM-Z']}}
    stu_str=json.dumps(stu_info) #把字典转成json(字符串) 命令带s的是在操作字符串,如:loads和dumps,如果在josn中转换的中文是ascii码,可以在list文件名后边加上 “ensureascii=False”
    fw =open('stu','w',encoding='utf-8')
    json.dump(stu_info,fw,indent=4) #dump操作文件,不需要自己write了,人家帮你写入文件,indent=4设置格式,加4个缩进,值为4和8都可以
    f=open('stu')
    res=json.load(f) #直接从文件里拿,不需要再读一次文件了
    print(res)
    五.函数
    函数就是一个功能,一个方法,用来简化代码
    def 函数名(参数):函数体 函数名不能是关键字,函数不能以数字开头;
    def say(name,sex='男'):   #函数,形参,形式参数就是一个变量
    #name 必填参数 未知
    #sex 默认值参数 非必填 调用时若填写就传填写值,没有填写就用默认值
    print('%s hahah'%name)
    say('aaa') #实参,实际参数
    函数必须调用才能执行,函数名后边加()就是调用他

    在函数里边的变量都是局部变量,函数执行结束就没有这个变量了
    def calc(a,b):
    res = a * b
    return res 返回计算结果值,不返回时得不到结果
    cur_money=200
    nx=calc(100,120) 定义一个变量来接收返回结果
    print(nx+cur_money)
    如果需要用到函数的处理结果的话,name就写return,不需要的话就不写,不写默认返回none
    函数里边如果碰到return,函数立即结束
    def my_file(name,content=None):
    with open(name,'a+') as f:
    f.seek(0)
    if content:
    f.write(content)
    else:
    return f.read()
    #一个函数只做一件事
    #重复的代码就是低级的
    #实现同样的功能,代码越少越好
  • 相关阅读:
    在Visual Studio 2019中配置OpenCV环境
    Java中的垃圾回收
    线程池
    Java中锁优化
    二叉树的几种遍历
    java中Comparator的用法(排序、分组)
    java8 stream
    Java后台生成二维码并上传到阿里云OSS
    代码生成器的成长过程
    软件的军工六性
  • 原文地址:https://www.cnblogs.com/kuhaha/p/9189497.html
Copyright © 2011-2022 走看看