pyhton习题练习

文件习题

2020-04-11  本文已影响0人  lvyz0207

这是一篇值得多练几遍的习题

# 1.编写一个程序建立一个文本文件 abc.txt,向其中写入”abc\n”并存盘,查看 abc.txt 是几个字节的文件,说明为什么。
def test1():
    with open("abc.txt", "a") as f:
        f.write("abc\n")


# test1()
# 4个字符
# 2.用 Windows 记事本编写一个文本文件 xyz.txt,在其中存入”123”后打”Enter”键换行,
# 存盘后查看文件应是 5 个字节长,用 read(1)读该文件,看看要读 5 次还是 4 次就把文件读完,为什么?编写程序验证。
def test2():
    with open("abc.txt", "r") as f:
        i = 0
        while True:
            f1 = f.read(1)
            i += 1
            print("i", i)
            if f1 == "":
                return False
            print(f1)


# test2()   # 读 5 次

# 3.编写程序查找某个单词(键盘输入)所出现的行号及该行的内容,并统计该单词在文件 共出现多少次。
def test3():
    word = input("输入一个单词")
    with open("abc.txt", "r") as f:
        # f.count(word)
        i = 0
        line_num = 0
        for line in f:
            line_num += 1
            if word in line:
                i += 1
                print(line_num, line.strip())
                # print(i)
        print(i)


# test3()

# 4.设一个文本文件 marks.txt 中存储了学生的姓名及成绩如下:
# 张三 96
# 李四 95
# ...... 每行为学生姓名与成绩,编写一个程序读取这些学生的姓名与成绩并按成绩的从高到低的顺 序输出到另外一个文件 sorted.txt 中。
def test4():
    """
    思路:创建一个新的分数数组,排序后,与原列表值一一对比,相等则输出到新的文件中
    :return:
    """
    marks = []
    lis = []
    with open("marks.txt", "r") as f:
        print(type(f))
        print(f)
        for line in f:
            lis.append(line.rstrip().split(" "))
            mark = int(line.rstrip().split(" ")[-1])
            marks.append(mark)

        marks.sort(reverse=True)
        for i in range(len(marks)):
            for j in range(len(lis)):
                if int(lis[j][1]) == marks[i]:
                    s = lis[j][0] + ' ' + lis[j][1] + "\n"
                    with open("sorted.txt", "a") as f:
                        f.write(s)


# test4()

# 5. 编写一个程序,它能统计一篇英文文章中的 a~z 各个字母出现的次数(不分大小写),并 按出现次数的多少按顺序输出。



def count_each_char_sort_value(string):
    """
     sorted(iterable, cmp=None, key=None, reverse=False)
     key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
     reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
    :param string:
    :return:
    """
    res = {}   # 定义一个字典
    for i in string:
        res[i] = res.get(i, 0) + 1     # 字典中的值   dict.get(key, default=None)  key -- 字典中要查找的键。 default -- 如果指定键的值不存在时,返回该默认值。
    res = sorted(res.items(), key=lambda x:x[1], reverse=True)  # sorted(iterable, cmp=None, key=None, reverse=False)  key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。  reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
    return res

with open("abc.txt", "r") as f:
    s = "".join(i.strip() for i in f)
    s = s.lower()
    print(count_each_char_sort_value(s))


# 6、查找一个文章里出现次数最多的10的单词
import re
def most_word(path,n):
    dic = {}
    with open(path,"r", encoding="utf-8") as file:
        data = file.read()
        words = [s.lower() for s in re.findall("\w+", data)]
        print(words)
        for word in words:
            dic[word] = dic.get(word, 0) + 1
        res = sorted(dic.items(), key= lambda x:x[1], reverse=True)[:n]
        return res
path = "/Users/lvyz/Downloads/axf/env/django_axf_env/Lib/codecs.py"
print(most_word(path, 5))


GT2Rs
上一篇 下一篇

猜你喜欢

热点阅读