计算文本文件中特定字符的数量(Python)

该博客介绍了如何使用Python在限制读取速度为100字节/次的情况下,计算随机txt文件中特定字符(不区分大小写)的出现次数。通过输入数字或字母,程序展示正常场景和鲁棒性测试,确保在面对非法字符输入时能正确处理。
摘要由CSDN通过智能技术生成

目录

题目描述

输入/输出描述

解题思路

代码

代码走读

 测试用例

1. 正常场景

2. 鲁棒性测试场景

传送门


题目描述

随机生成一个txt文件。要求文件的行数随机1 -- 100行。每一行随机1 -- 100个字符。字符随机从数字和大小写字母中选取。

输入一个字符,计算该字符在随机生成的txt文件中出现的次数。如果输入的是字母,不区分大小写,来计算其出现的次数。

条件限制:从txt文件中读取内容时,为了避免占用过多的内存,要求限制在100字节/次的读取速度。

输入/输出描述

输入:想要检测的字符(只能是数字或英文大小写字母)

输出:该字符在随机文件中和出现的次数。(不区分大小写)

解题思路

1、预置输出文件或清空文件

2、生成随机字符并写入文件

3、计算次数

代码

import string
import random

def rollback(url):
    open(url, "w").write("")
    return


def read_file(url, ele, size=100):
    count = 0
    with open(url, "r") as f:
        while True:
            line = f.read(size)
            if not line:
                break

            count += process(line, ele)
    f.close()
    return count


def process(line, ele):
    lower = line.lower()
    return lower.count(ele.lower())


pools = string.digits + string.ascii_letters
path = "example.txt"
logo = input("Please input a char to count numbers in file: ")
if len(logo) > 1:
    logo = logo[0]

if logo not in pools:
    print("Invalid Char input.")
    exit()

# 预置输出文件或清空文件
rollback(path)

# 按要求生成随机内容并写入文件
lines_num = random.randint(1, 100)
for i in range(lines_num):
    char_num = random.randint(1, 100)
    write_str = ""

    for j in range(char_num):
        rs = random.choice(pools)
        write_str += rs
    write_str += "\n"
    open(path, "a").write(write_str)

print("count char %s: %s" % (logo, read_file(path, logo)))

代码走读

import string
import random

# 资源预置。创建或清空txt文件
def rollback(url):
    open(url, "w").write("")
    return


# 读文件,读取速度限制在100字节/次,返回计算出字符出现的次数的结果
def read_file(url, ele, size=100):
    count = 0
    with open(url, "r") as f:
        while True:
            line = f.read(size)
            if not line:
                break

            count += process(line, ele)
    f.close()
    return count


# 真正计算次数的函数,将读取到的字符片段转化为小写(因为要求不区分大小写),在统一进行计算
def process(line, ele):
    lower = line.lower()
    return lower.count(ele.lower())


# 代码开始的位置。pools表示随机字符池,包含数字字符0-9和大小写字母。
pools = string.digits + string.ascii_letters
# txt文件的路径
path = "example.txt"
# 输入待检测次数的字符。如果输入多个字符,则只检测第一个输入的字符。如果第一个输入的字符不在pools中,则报错并终止程序
logo = input("Please input a char to count numbers in file: ")
if len(logo) > 1:
    logo = logo[0]

if logo not in pools:
    print("Invalid Char input.")
    exit()

# 调用自定义的rollback()函数预置输出文件或清空文件
rollback(path)

# 按要求生成随机内容并写入文件
# lines_num随机行数。char_num每一行的随机字符数
lines_num = random.randint(1, 100)
for i in range(lines_num):
    char_num = random.randint(1, 100)
    write_str = ""

    for j in range(char_num):
        rs = random.choice(pools)
        write_s
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值