文件读写与异常综合练习

  • 题目
  • 1. 创建文件data.txt,共100000行,每行存放一个1~100之间的整数。
  • 2. 编写一个程序,提示用户输入其名字,用户作出响应后,将其名字累加写入到文件guest.txt中,同时打印guest.txt文件记录的名字(guest.txt记录每次运行程序所写的名字),当输入‘n’时,输入名字程序退出。
  • 3. 生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;读取ips.txt文件统计这个文件中ip出现频率排1的ip。
  • ①文件读写操作:
  • ②sorted函数如何对字典进行排序
  • 4. 在当前目录新建目录img, 里面包含100个文件,100个文件名各不相同(X4G5.png),将当前img目录所有以.png结尾的后缀名改为.jpg。
  • 5. 使用多个文件练习:分别在当前目录中手动创建3个文本文件,名字分别命名为:毕业的日子.txt,最平凡处最美丽.txt,花开如笑.txt。分别读取每一个文本文件,统计文件中的句子数量。使用异常模块来处理读取过程中的异常。


题目

1. 创建文件data.txt,共100000行,每行存放一个1~100之间的整数。

import random

filename = "C:/Users/User/Desktop/Python实验/文件的读写与异常处理/data.txt"
with open(filename, "w") as f:
    for _ in range(100000):
        f.write(str(random.randint(1, 100)) + '\n')

直接打开文件,循环十万次,每次运用random函数生成一个1到100的整数并把它str化,直接写入。每次写入的时候会加一个换行符。

python显示文件差异内容 python文件与异常例题_User

2. 编写一个程序,提示用户输入其名字,用户作出响应后,将其名字累加写入到文件guest.txt中,同时打印guest.txt文件记录的名字(guest.txt记录每次运行程序所写的名字),当输入‘n’时,输入名字程序退出。

filename = 'C:/Users/User/Desktop/Python实验/文件的读写与异常处理/guest.txt'
for _ in range(100000):
    names = input("please input your name:")
    if names == 'n' or names == 'N':
        break
    with open(filename, 'a') as f:
        f.write(names + "\n")
    with open(filename, 'r') as f:
        name = f.read()
        print(name)

一个大循环(100000次)判断输入的数是否为N或n,如果是直接退出循环。如果不是则将输入写入文件,然后关闭,再用只读打开输出全部储存的名字。用while也一样的。

python显示文件差异内容 python文件与异常例题_异常处理_02

3. 生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;读取ips.txt文件统计这个文件中ip出现频率排1的ip。

①文件读写操作:

filename = 'C:/Users/User/Desktop/Python实验/文件的读写与异常处理/ips.txt'
ips = ['172.25.254.' + str(i) for i in range(1, 255)]
with open(filename, "w") as f:
    for _ in range(1200):
        f.write(str(random.choices(ips)[0]) + '\n')

用ips来储存172.25.254开头的所有ip,然后打开文件,for循环1200次,每次使用random模块从ips中随机选出一个写入文件,同时每次加入一个换行符。

python显示文件差异内容 python文件与异常例题_python显示文件差异内容_03

②sorted函数如何对字典进行排序

filename = 'C:/Users/User/Desktop/Python实验/文件的读写与异常处理/ips.txt'
dict = {}
with open(filename, "r") as f:
    for ip in f:
        if ip in dict:
            dict[ip] += 1
        else:
            dict[ip] = 1
    sorted_ip = sorted(dict.items(), key=lambda x: x[1], reverse=True)[:10]
    print(sorted_ip)

读取ips.txt文件的全部内容,判断如果ip存在,就将以这个ip为属性值的键值加1,如果ip不存在,就将它初始化键值为1。然后将这个字典用sorted模块排序,因为sorted默认升序,所以设置反转,最后取前十输出。

python显示文件差异内容 python文件与异常例题_Python_04

4. 在当前目录新建目录img, 里面包含100个文件,100个文件名各不相同(X4G5.png),将当前img目录所有以.png结尾的后缀名改为.jpg。

思路:
首先编写os的生成目录和文件模块,其次编写random函数和string模块的应用结合,最后编写os模块的修改后缀。

p = 'C:/Users/User/Desktop/Python实验/文件的读写与异常处理/'
if os.path.exists(p + 'img') is not True:
    os.mkdir(p + 'img')
for _ in range(100):
    name = ''.join(random.sample(string.ascii_letters + string.digits, 4))
    filename = p + 'img/' + name + '.png'
    open(filename, 'w').close()
for i in os.listdir(p + 'img'):
    new = i.replace('.png', '.jpg')
    os.rename(p + 'img/' + i, p + 'img/' + new)

用p储存根目录,判断是否有img这个文件夹,如果没有则创建。然后for循环100次,每次生成数字和字母共4个字符,然后用join将他们连接,最后加上.png后缀作为名字,然后因为os没有生成文件相关的功能,所以我们用了open来实现生成文件,利用了open会检测有没有该文件,如果没有则创建的功能。

然后又用循环直接用os迭代img文件夹下的文件,用replace将他们的名字后缀改成.jpg保存到变量new中,然后用os的rename来更改名字。

python显示文件差异内容 python文件与异常例题_python显示文件差异内容_05

5. 使用多个文件练习:分别在当前目录中手动创建3个文本文件,名字分别命名为:毕业的日子.txt,最平凡处最美丽.txt,花开如笑.txt。分别读取每一个文本文件,统计文件中的句子数量。使用异常模块来处理读取过程中的异常。

p = 'C:/Users/User/Desktop/Python实验/文件的读写与异常处理/'
    files = ['毕业的日子.txt', '最平凡处最美丽.txt', '花开如笑.txt']
    dict = {}
    for file in files:
        try:
            with open(p + file, 'r') as f:
                text = f.read()
                dict[file.replace('.txt', '')] = text.count('。') + text.count('!') + text.count('?')
        except:
            print("error")
    print(dict)

用files列表来储存是哪个文件名,然后循环来分别open这三个文件。直接读取并用count来提取"。","!","?"的数量,即为句子数量。然后用字典储存每个文件的句子数量。并用上了简单的try模块来进行错误处理。

一个小细节:就是写入字典时,用replace将文件名后的.txt删掉了,看上去更简单明了了。

考虑过用re(正则),应该也是可行的。