当前位置: 首页 > 知识库问答 >
问题:

一个字节样的对象是必需的,而不是'str': typeerror在压缩文件

国跃
2023-03-14

我发现子字符串在压缩文件使用下面的python脚本。我得到"TypeError:一个字节样的对象是必需的,而不是'str'"。请任何一个人帮我解决这个问题。

from re import *
import re
import gzip
import sys
import io
import os

seq={}
with open(sys.argv[1],'r') as  fh:
    for line1 in fh:
            a=line1.split("\t")
            seq[a[0]]=a[1]
            abcd="AGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG"
            print(a[0],"\t",seq[a[0]])

count={}
with gzip.open(sys.argv[2]) as gz_file:
    with io.BufferedReader(gz_file) as f:
            for line in f:
                    for b in seq:
                            if abcd in line:
                                    count[b] +=1

for c in count:
    print(c,"\t",count[c])

fh.close()
gz_file.close()
f.close()

和输入文件是

TruSeq2_SEAGATCGGAAGAGCTCGTATGCCGTCTTCTGCTTG

第二个文件是压缩文本文件。行“if abcd in line:”显示错误。

共有1个答案

逑彬炳
2023-03-14

“BufferedReader”类提供了ByTestRing,而不是文本字符串,您可以在Python3中直接比较这两个对象-

由于这些字符串只使用了几个ASCII字符,实际上并不是文本,因此您可以在代码中始终使用字节字符串。

所以,每当你打开一个文件(不是gzip.open),打开它在二进制模式(即open(sys.argv[1],'rb')而不是'r'打开文件)

还可以在硬编码字符串前面加上一个b,这样Python就可以使用一个二进制字符串:abcd=b“agatcggaagaggctcgtagctcgtcgttcttctgcttg”-这将避免在行中出现类似的错误,尽管错误消息应该与您显示的不同。

或者,使用所有内容作为文本——这可以给你更多的方法来处理打印时数据的字符串(Python3的字节条纹有些瘫痪)呈现,并且不应该慢得多——在这种情况下,代替上面建议的更改,包括额外的行来解码从数据文件中提取的行:

with io.BufferedReader(gz_file) as f:
    for line in f:
        line = line.decode("latin1")
        for b in seq:

(除了错误之外,您的程序逻辑似乎有点错误,因为您实际上在最内部的比较中没有使用变量字符串-只是固定的bcd值-但我认为一旦消除错误,您就可以修复taht)

 类似资料:
  • 我对Python完全陌生,正在尝试通过以下示例进行学习:对我来说,学习的最佳方式是查看示例,并尝试理解和使用我自己需要的代码。 我目前正试图通过一个项目学习python,该项目有树莓皮零W和adafruit fona 808突破板。 然而,示例代码是为Python2.7编写的,我想将其转换为适用于Python3的代码。 我收到这个打字错误。问题是,国际单项体育联合会应该如何运作。我曾尝试搜索谷歌并

  • 以下是尝试使用套接字修改用户提供的输入的代码: 当我执行它并提供输入时,会发生以下错误: 我能做些什么来解决这个问题?

  • 我有windows 11 python 3.9,我运行一个py脚本来做一个启动器,我解决了一个问题,长重命名为int,但现在我不能确定发生了什么,错误是: TypeError:需要一个类似字节的对象,而不是str

  • 我正在尝试遵循这个OpenCV练习http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html 但是在运行mergevec.py的步骤中遇到了困难(我使用Python版本而不是.cpp版本)。我使用的是Python3,而不是本文中提到的Python2.x。 此文件的源是https://github.com/

  • 问题内容: 几年前,我正在使用一个先前提出的问题的代码,但是,我认为这已经过时了。尝试运行代码,我收到上述错误。我仍然是Python的新手,因此无法从类似的问题中得到很多澄清。有人知道为什么会这样吗? 追溯 问题答案: 默认情况下返回stdout或stderr流的对象。这意味着您还需要在针对这些对象的操作中使用对象。使用对象。使用字节文字(注意前缀): 或先解码数据(如果您知道所使用的编码)(通常

  • 问题内容: 我最近已经迁移到Py 3.5。这段代码在Python 2.7中正常工作: 升级到3.5后,我得到了: 最后一行错误(模式搜索代码)。 我试过使用语句两侧的函数,也尝试过: -无济于事。 我能够很快解决几乎所有的问题,但是这个小小的声明困扰着我。 问题答案: 你以二进制模式打开文件: 这意味着从文件读取的所有数据都作为bytes对象而不是作为对象返回。然后,你不能在容纳测试中使用字符串: