Python:字符串格式错误/w dictionary/list reads期间的参数转换

2024-06-06 13:07:07 发布

您现在位置:Python中文网/ 问答频道 /正文

对这些董事会是新手,了解有协议和任何批评意见。几天前,我已经开始编写python编程了,我正努力赶上进度。该程序的基础是读取一个文件,将一个特定出现的字符串转换成一个字典中的文档位置。问题很多,我会接受所有的回应。在

这是我的代码:

f = open('C:\CodeDoc\Mm9\sampleCpG.txt', 'r')
cpglist = f.read()
def buildcpg(cpg):
    return "\t".join(["%d" % (k) for k in cpg.items()])

lookingFor = 'CG'
i = 0
index = 0
cpgdic = {}
try:
    while i < len(cpglist):
        index = cpglist.index(lookingFor, i)
        i = index + 1
        for index in range(len(cpglist)):
            if index not in cpgdic:
                cpgdic[index] = index
        print (buildcpg(cpgdic))
except ValueError:
    pass
f.close()

cpgdic应该充当索引中获得的位置引用的字典。每个cphunch的cphunch都应该被读取,其中cphunch应该是新的。我相信(??)它将cpgdic传递到buildcpg函数中,在那里它应该作为'CG'所有位置的输出返回,但是错误“类型错误:不是全部“字符串格式化期间转换的参数”显示。轮到你了!在

这会破坏我的2GB内存;我需要更多的阅读来提高


Tags: 字符串inforindexlen字典错误cg
1条回答
网友
1楼 · 发布于 2024-06-06 13:07:07

cpg.items正在生成元组。因此,ktuple(长度2),然后尝试将其格式化为单个整数。在


作为一个补充说明,如果不使用[和{}行中的[和{},那么内存效率可能会更高一些。这将把你的列表理解变成一个更好的生成器表达式。如果使用python2.x,也可以使用cpg.iteritems()而不是{}来节省一点内存。在


在键和值相同的地方存储字典也是没有意义的。在这种情况下,一个简单的列表可能更优雅。我可能会这样写代码:

with open('C:\CodeDoc\Mm9\sampleCpG.txt') as fin:
     cpgtxt = fin.read()

indices = [i for i,_ in enumerate(cpgtxt) if cpgtxt[i:i+2] == 'CG']
print '\t'.join(indices)

这就是它的作用:

^{pr2}$

请注意

i for i,_ in enumerate(s)

基本上和

i for i in range(len(s))

除了我不喜欢range(len(s)),前一个版本可以处理任何iterable而不仅仅是序列。在

相关问题 更多 >