100例(p019—p021)

  • python原生数据结构:元组Tuple(),列表List[],集合Set{},字典Dictionary{A:B};

p019_将两个文本文档的部分内容合并,并且使结果输出到一个新的.txt文本文档中


course_teacher = {}
with open(r"datas/course_teacher.txt",encoding="utf-8") as fin:
    for line in fin:
        line = line[:-1]
        course, teacher = line.split(",")
        #if course not in course_teacher:
        course_teacher[course] = teacher
        #course_teacher.append[course] =

print(course_teacher)

with open ("./course_student_grade_input.txt",encoding="utf-8") as fin:
    for line in fin:
        line = line[:-1]
        course, sno, sname, sgrade = line.split(",")
        teacher = course_teacher.get(course)    #数据合并
        print(course, teacher, sno ,sname, sgrade)

def write_file(course, teacher, sno ,sname, sgrade):
    with open("./course_teacher_map.txt", "w") as fout:  # "w"代表写出
        for data in course, teacher, sno ,sname, sgrade:
            fout.write(",".join(data) + "\n")
#生成一个新文件
write_file(course, teacher, sno ,sname, sgrade)

 

生成了这样一个文档,与结果比对,只将最后一行的元组键输出,所以存在错误存疑

p020

读取文件的两个方法:

1、按行读取:

for line in fin:

 2、一次性读取所有内容到一个字符串

content = fin.read()

open

Python提供了非常方便的文件读写功能,其中open是读写文件的第一步,通过open读写文件的方式和把大象装冰箱是一样的

f = open("test.txt",'w')    #第一步,把冰箱门(文件)打开
f.write("this is content")  #第二步,把大象(文件内容)装进去
f.close()                   #第三步,把冰箱门关上,否则大象可能会跑掉

2.举例

2.1   "1.txt"和  "./1.txt"

这两个同等意义
在python中使用

3.python中 r'', b'', u'', f'' 的含义

"r" 的作用是去除转义字符

 " f "开头表示在字符串内支持花括号{   }内的python 表达式

"b"表示是bytes类型

字符串前加 u

例:u"我是含有中文字符组成的字符串。"

作用:

后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。

啊啊啊啊,差点因为一点点小问题有开始有点摆烂的我,这种未知的探索总会给我柳暗花明又一村的感觉,啊啊啊啊,我也有点太喜欢这样了。


import os
#扫描文件夹
data_dir = "datas/many_texts"


contents = []

for file in os.listdir(data_dir):
    file_path = f"{data_dir}/{file}"
    if os.path.isfile(file_path) and file.endswith(".txt"):
        with open(file_path,encoding="utf-8") as fin:
            contents.append(fin.read())
            #fin.read()读取文件的整个内容,将其放入contents里面


#形成一个大的字符串
final_content = "\n".join(contents)

with open("./datas/many_texts.txt","w") as fout:   #”w“写出模式
    fout.write(final_content)   #写出final_content的内容

 

with open(file_path) as fin:
with open(file_path,encoding="utf-8") as fin:

 

1、os.listdir——扫描文件夹
2、形成一个大的字符串  "\n".join

 p021

小粗心酿成大问题 

 

 

 list可以使用.append,而字符串和字典dict不可以

List转换为其它数据结构

  • 列表可以便利的转换为各种数据类型;注意,单个列表无法转换为字典。
  • 元组(Tuple)

  • 元组一旦创建就无法对其元素进行增加、删除、修改。
  • 列表(List)

  •  list可以使用.append,而字符串和字典dict不可以
  • 一维列表的创建——使用[]可以创建一个列表对象,列表是一种有序的集合,可以随时添加和删除其中的元素;
  • 多维列表的创建——尽管list默认是一维的,但可以使用[]嵌套创建多维列表。

 集合(Set)

  • 集合不会出现重复值,所有元素按照一定的顺序排列,若元素为数字则按数字大小排列,使用set()函数创建集合会自动的拆分多个字母组成的字符串
  • p021_students_like_count
    
    like_count = {}
    student = [like_count]
    sname1_list = []
    sname2_list = []
    sname3_list = []
    sname4_list = []
    #key = 球类项目,value = 喜欢人数
    with open("./datas/student_like.txt",encoding="utf-8") as fin:
        for line in fin:
            line = line[:-1]
            sname, likes = line.split(" ")
            likes_list = likes.split(",")
            for like in likes_list:
                #为什么sname没有输出打印,从此句的for循环就可以看出来
                if like not in like_count:
                    like_count[like]= 0       #这个好像是确定value的值
                like_count[like] += 1
                #student.append()
                #if sname not in like_count:
                #for sname in sname_list:
                if like == "篮球":
                    sname1_list.append(sname)      #sname在这里是临时变量
                if like == "足球":
                    sname2_list.append(sname)
                if like == "台球":
                    sname3_list.append(sname)
                if like == "羽毛球":
                    sname4_list.append(sname)
        student.append(sname1_list)
    
                    #print(sname)
                        #like_count[sname] = print(sname)
                        #like_count[sname] = "print(sname)"
    
    print(like_count)
    print(student)
    print("字典值转List:",list(like_count.values()))
    print("字典键转List:",list(like_count.keys()))
    print("打篮球的student: ",sname1_list)
    print("踢足球的student: ",sname2_list)
    print("打台球的student: ",sname3_list)
    print("打羽毛球的student: ",sname4_list)
    
    
    #提出问题:我想把喜欢各球类人名打印输出到like_count之后,该如何做
    #答:我没有把喜欢各球类的学生,放到dict中,而是新建了四个列表
    #如何让其循环生成列表???
  • #提出问题1:我想把喜欢各球类人名打印输出到like_count之后,该如何做
    #答:我没有把喜欢各球类的学生,放到dict中,而是新建了四个列表
    #提出问题2:如何让其循环生成列表???----------------- 问题2未解决

  • 自己提出创造问题,在查阅资料,看之前学过的人、前辈、同学总结经验,任何东西一定是自己亲身的动手实践才更加印象深刻,虽然过程是不顺利的,是让人烦躁的,但是解决问题的成就感又是无与伦比的,理论知识的学习是重要的,因为没有理论支撑,是很难去理解的,但直接并且将仅仅接触理论知识,又是不可以的,我认为当时学到的知识应用的只是问题最浅显的层面,但之后应用的层面问题不会超明显的告诉你,而是你自己去发掘,去构思,假设你现在的想法——给一个字典dict增加key值,但是增加key值又不是普通的增加,而是在一个key、value完全完整的条件下,再加东西,这个东西甚至不能称为key,剖析:(现在好像来了一点点想法)应该把like_count的key1、key2、key3转变成list,而后再用list.append

  • 但是如果暂时实现不了我们最初构想的想法,可以退而求其次,一个问题的解决方法又不是只有一种,对吧?哈哈哈

  • 字典dict转list和字典键转list一致

     

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值