ATOM    856  CE ALYS A 104       0.809   0.146  26.161  0.54 29.14           C
  ATOM    857  CE BLYS A 104       0.984  -0.018  26.394  0.46 31.19           C
  ATOM    858  NZ ALYS A 104       1.988   0.923  26.662  0.54 33.17           N
  ATOM    859  NZ BLYS A 104       1.708   0.302  27.659  0.46 37.61           N
  ATOM    860  OXT LYS A 104      -0.726  -6.025  27.180  1.00 26.53           O
  ATOM    862  N   LYS B 276      17.010 -16.138   9.618  1.00 41.00           N
  ATOM    863  CA  LYS B 276      16.764 -16.524  11.005  1.00 31.05           C
  ATOM    864  C   LYS B 276      16.428 -15.306  11.884  1.00 26.93           C
  ATOM    865  O   LYS B 276      16.258 -15.447  13.090  1.00 29.67           O
  ATOM    866  CB  LYS B 276      17.863 -17.347  11.617  1.00 33.62           C

J'ai le fichier texte ci-dessus et je dois créer deux fichiers texte en fonction des différences à la position 21 en ligne. J'ai écrit un script qui peut imprimer les résultats requis. Mais si je ne sais pas quel est le personnage de la colonne 21, comment puis-je faire ce travail. Voici le script que j'ai essayé. supposons que je ne sais pas si la ligne 21 est "A" et "B" ou "B" et "G" ou toute autre combinaison et que je dois me séparer sur la base de la ligne 21. Comment puis-je faire cela?

  import sys

  for fn in sys.argv[1:]:
     f=open(fn,'r')

     while 1:
        line=f.readline()
        if not line: break
        if line[21:22] == 'B':
           chns = line[0:80]
           print chns
1
user2176228 16 juil. 2015 à 15:39

3 réponses

Je ne sais pas ce que vous essayez de réaliser. Mais le code suivant triera les lignes de tous les fichiers par le 21e caractère du dictionnaire lines.

import sys

lines = dict()
for fn in sys.argv[1:]:
    f = open(fn,'r')

    for line in f:
        if not line:
            break
        key = line.split()[4]
        if key not in lines.keys():
            lines[key] = list()
        lines[key].append(line)

Vous pouvez ensuite obtenir tous les 21e caractères qui se sont produits en utilisant lines.keys(), et obtenir une liste () avec toutes les lignes correspondantes du dictionnaire.

1
Bastian35022 16 juil. 2015 à 13:15

Utilisez str.split et comparez le 5ème élément (c'est-à-dire le 21ème caractère)

while 1:
    line = f.readline()
    if not line: 
        break

    # get character in 5th column
    ch = line.split()[4]
    if ch == 'B':
        chns = line[0:80]
        print chns
    else: # not sure what the character is
        pass # do something
1
ILostMySpoon 16 juil. 2015 à 12:53

Vous pouvez simplement initialiser une valeur sur None et voir si elle change:

import sys

for fn in sys.argv[1:]:
    old = None
    f=open(fn,'r')

    for line in f:
        if not line: break
        if (old is None) or (line[21] == old):
           old = line[21]
           chns = line[0:80]
           print chns
1
Serge Ballesta 16 juil. 2015 à 12:59