[Tutor] how to unique the string

Alan Gauld alan.gauld at btinternet.com
Sun Oct 23 11:08:44 CEST 2011


On 23/10/11 09:33, lina wrote:

> I have a further question:
>

 > Welcome anyone help me transform the code to another form.

What form would you like it transformed to?
A flow chart? Another programming language? A different style of Python 
(Functional programming or OOP maybe?)

I'm not sure what you want here?
In the meantime I'll offer some general comments:

> #!/usr/bin/python3
> import os.path
> mapping={}
>
>
> DICTIONARYFILE="dictionary.pdb"
> TOBETRANSLATEDFILEEXT=".out"
> OUTPUTFILEEXT=".txt"
>
> def generate_dict(dictionarysourcefile):
>      for line in open(dictionarysourcefile,"r").readlines():

You don't need the readlines(). Just
use

     for line in open(dictionarysourcefile,"r"):

That will work just as well.

>          parts=line.strip().split()
>          mapping[parts[2]]=parts[0]
>
>
> def translate_process(dictionary,tobetranslatedfile):
>      results=[]
>      unique={}
>      for line in open(tobetranslatedfile,"r").readlines():
>          tobetranslatedparts=line.strip().split()
>          results.append(dictionary[tobetranslatedparts[2]])
>      for residue in results:
>          if residue not in unique:
>              unique[residue]=1
>          else:
>              unique[residue]+=1

You can replace the if/else with the get() metjod of a dictionary:

            unique[residue] = unique.get(residue,0) + 1

get returns the current value and if the value is not there it returns 
the second parameter(zero here)


>      for residue, numbers in unique.items():
>          print(residue,numbers)
>          with open(base+OUTPUTFILEEXT,"w") as f:
>              f.write(str(unique))      ########### How can I output the
> results the same as the print one. Thanks.

create a string before you write it:

mystr = str(residue) + str(numbers)

is the simplest way. However you may prefer to format the string in 
another way first. But thats your choice...

> if __name__=="__main__":
>      generate_dict(DICTIONARYFILE)
>      for infilename in os.listdir("."):
>          base, ext =  os.path.splitext(infilename)
>          if ext == TOBETRANSLATEDFILEEXT:
>              translate_process(mapping, infilename)

-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/



More information about the Tutor mailing list