呃呵呵哈哈啥 2021-12-14 11:20 采纳率: 100%
浏览 24
已结题

我写了一个python程序以计算字符串出现频率,这个程序总是少算最后一行的最后一个字符,这是怎么回事?

问题遇到的现象和发生背景
>1
qq
>2
wwwwwwwwwwwwww
>3
qqqqqweqeq
>4
rrrrrrrrrrrrrrrrrr
>5
tttttttttttttttttttt
>6
ddssaa
问题相关代码,请勿粘贴截图

import pandas as pd
import os

leng=1
f = open("111.fna","r")
lines = f.readline()
chr = 0
l = 1

thefile = open("111.fna","r")

while True:
    buffer = thefile.read()
    if not buffer:
        break
    l += buffer.count('\n')
thefile.close()
lp = l + 1
h = 1   # 计算行数
while True:
    if ">" in lines:  # 如果有>号,
        chr = chr + 1
        lines = f.readline()  #则读取下一行
        h = h + 1

    exec("dic%s=dict()"%chr)
    for i in range(len(lines)-leng):
        sub = lines[i:i+leng]
        exec("x = dic%s.keys()"%chr)
        if sub in x:
            exec("dic%s[sub] += 1"%chr)
        else:
            exec("dic%s[sub] = 1"%chr)
    exec("df%s=pd.DataFrame([dic%s])"%(chr,chr))
    outputpath = "C"+str(chr)+"-"+str(leng)+'NCount.csv'
    exec("df%s.to_csv(outputpath,sep=',',index=False,header=True)"%chr)
    lines = f.readline()
    h = h + 1
    if h >= l + 1:
        break


f.close()
运行结果及报错内容

此时的
dic1={'q': 2}
dic2={'w': 14}
……(前5个字典均正常)……
dic6={'d': 2, 's': 2, 'a': 1}
少一个a。

我的解答思路和尝试过的方法

我用过直接readline,但是总是不能读取最后一行,才先计算行数再计数。

我想要达到的结果

dic6=dic6={'d': 2, 's': 2, 'a': 2}
注:用字典计算字符串频率的方法来自https://ask.csdn.net/questions/7405804?spm=1001.2014.3001.5501

  • 写回答

2条回答 默认 最新

  • chuifengde 2021-12-14 11:31
    关注

    因为最后一行没有回车,你还是减了一个leng

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 修改了问题 12月14日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看