为什么这个字符串不改成大写?

2024-10-01 22:38:54 发布

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

所以我有一个氨基酸的文件,我正在读mdvfmkglskakegvvaaaektkqgvaeaagktkegvlyvgsktkegvvhgvatvaektk eqvtnvggavvtgvtavaqktvegagsiaaatgfvkkdqlgkneegapqegiledmpvdp dneayempseegyqdyepea

我有一个大写字母列表叫做氨基酸。问题是我看不懂顺序,因为字母是小写的。我一直想把它改成大写。读取这个文件没有问题,我以为我已经成功地将它的内容转换成了一个字符串(但也许我没有?)。你知道吗

aminoacids = ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y']
content1 = fh.readline() #first line, which is not the sequence
        #print content1
charline1 = len(content1)-1 #number of characters in the first line
        #print charline1
contentall = fh.readlines() #each line is converted into a string and put into a list
        #print contentall
numlines = len(contentall) #number of elements in list = number of lines, not the first one
        #print numlines
contentjoined = ''.join(contentall) #list elements are combined, but this includes new lines as characters
contentjoined = contentjoined.translate(None, "\n")
contentjoined = contentjoined.translate(None,''.join([i for i in contentjoined if i not in aminoacids]))
contentjoined = contentjoined.upper()
print contentjoined
numaa = len(contentjoined)
print numaa #this shouldn't be zero but it is

为什么这样不行?我能做些什么来修复它?我现在处于一个with的状态……这以前不是问题,但现在是吗?Numaa是0,但它不应该是。我意识到我可以把小写字母添加到我的列表中,但是应该有一个更“pythonic”的方法来解决这个问题。你知道吗


Tags: 文件oftheinnumberlenisline
3条回答

拉入文件时,可以将所有内容转换为大写。也许是这样的?你知道吗

with open('myfile.txt', 'r') as f:
    data = f.read().upper()

print(data)
'MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTK\nEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAPQEGILEDMPVDP\nDNEAYEMPSEEGYQDYEPEA\n'

问题出在translate()命令中:

contentjoined = contentjoined.translate(None, "\n")
contentjoined = contentjoined.translate(None,''.join([i for i in contentjoined if i not in aminoacids]))

在这里,您将用None替换找到的所有内容(我不确定您在contentjoinedaminoacids中有什么数据)。 如果你尝试:

>>>temp = "this is a test string"
>>>temp.translate(None, "aeiou")
>>>'ths s  tst strng' #THIS IS OUTPUT

所以我猜你的整个字符串都变成了None。 签出translate() Docs

是因为您在检查aminoacids中的字符串后将字符串设为大写吗?试着把contentjoined = contentjoined.upper()向上移动一两行。你知道吗

当您检查aminoacids时,您为str.translate提供了一个完全小写的字符串,因此它与字符串不匹配。结果是这样的:

>>> c = contentjoined.translate(None,''.join([i for i in contentjoined if i not in aminoacids]))
>>> c
''

如果您首先调用upper,那么您将比较一个大写字符串和一个大写字符串列表,这样实际上就有了匹配项。它看起来是这样的:

>>> contentjoined = contentjoined.upper()
>>> c = contentjoined.translate(None,''.join([i for i in contentjoined if i not in aminoacids]))
>>> c
'MDVFMKGLSKAKEGVVAAAEKTKQGVAEAAGKTKEGVLYVGSKTKEGVVHGVATVAEKTKEQVTNVGGAVVTGVTAVAQKTVEGAGSIAAATGFVKKDQLGKNEEGAPQEGILEDMPVDPDNEAYEMPSEEGYQDYEPEA'

如果要将字符串保留为小写字母,只需将其与大写字母进行比较并保留小写字母即可。看起来是这样的:

>>> c = contentjoined.translate(None,''.join([i for i in contentjoined.upper() if i not in aminoacids]))
>>> c
'mdvfmkglskakegvvaaaektkqgvaeaagktkegvlyvgsktkegvvhgvatvaektkeqvtnvggavvtgvtavaqktvegagsiaaatgfvkkdqlgkneegapqegiledmpvdpdneayempseegyqdyepea'

相关问题 更多 >

    热门问题