2010-07-09 6 views
1

J'utilise ce code pour diviser une donnée afin de créer une liste avec trois sous-listes. pour diviser lorsqu'il y a * ou -. mais il lit aussi le \ n \ n * .. ne sais pas pourquoi? Je ne veux pas les lire? quelqu'un peut-il me dire ce que je fais mal? ce sont les donnéeslistes et sous-listes

* Citation du jour -Education est la capacité d'écouter presque tout sans perdre votre humeur ou votre confiance en soi - Robert Frost -Education est ce qui survit quand ce qui a été appris a été oublié - BF Skinner * Fait du jour -Les fractales, une partie importante de la théorie du chaos, sont très utiles pour étudier une grande quantité de zones. Ils sont présents dans toute la nature, et peuvent donc être utilisés pour aider à prédire beaucoup de choses dans la nature. Ils peuvent aussi aider à simuler la nature, comme dans la conception graphique de films (animation de nuages, etc.), ou prédire les actions de la nature. -D'après un récent sondage réalisé par Just-Eat, tout le monde au Royaume-Uni ne sait pas exactement ce qu'est la délicatesse écossaise, haggis. Parmi les 1623 Britanniques interrogés: \ n \ n * 18% des Britanniques pensaient que haggis était une sorte d'animal écossais. \ N \ n * 15% pensaient que c'était un instrument de musique écossais. \ N \ n * 4% pensaient qu'il était un personnage de Harry Potter. \ n \ n * 41% ne savaient même pas ce qu'était le plat national écossais. \ n \ nQuand un petit nombre d'Ecossais a admis ne pas savoir ce que haggis était, ils ont aussi découvert que 68% des Ecossais Aimer voir Haggis livré comme à emporter. -Avec les inquiétudes croissantes concernant Facebook et ses paramètres de confidentialité en constante évolution, quelques développeurs de logiciels ont désormais conçu un site Web permettant aux utilisateurs de parcourir les mises à jour de statut de ceux qui ne disposent pas des paramètres de confidentialité adéquats. \ N \ nNamed Openbook, le but ultime du site est d'exposer davantage les problèmes avec Facebook et ses paramètres de confidentialité au grand public, et montrer aux gens à quel point il est facile d'accéder à ce type d'informations sur les étrangers complets. Le site fonctionne comme un moteur de recherche, il est donc facile de rechercher des termes tels que «ne le dites à personne» ou «je déteste mon patron», et les recherches peuvent également être restreintes par sexe. * Animal du jour -Scottish Terrier -Land Shark -Hamster -Tse tsé FIN

i utiliser ce code:

contents = open("data.dat").read() 
data = contents.split('*') #split the data at the '*' 

newlist = [item.split("-") for item in data if item] 

pour faire ce tort semblable à ce que je dois get list

+0

Qu'entendez-vous par "il lit aussi le \ n \ n *"? Cela fait partie des données, alors pourquoi ne devrait-on pas les lire? –

+0

vous voyez comment les données sont postées écrire maintenant sur le site, ce ne sont pas les données réelles. il a aussi \ n \ n * dedans. entendez vous voir ça se voit comme ça. mais quand je le lis il m'imprime le \ n \ n * je dono si vous l'avez – babikar

+0

il imprime son comme ceci! – babikar

Répondre

2

Le "\ n \ n" fait partie des données d'entrée, donc il est conservé en python. Il suffit d'ajouter une bande() pour le supprimer:

finallist = [item.strip() for item in newlist] 

Voir la bande() docs: http://docs.python.org/library/stdtypes.html#str.strip

MISE À JOUR DE COMMENTAIRE:.

finallist = [item.replace("\\n", "\n").strip() for item in newlist] 
+0

Non, 'strip()' ne le fera pas! Je suis aussi confus au premier abord mais je regarde de plus près - dans le fichier il y a des séquences de '\' et 'n': 'Britanniques interrogés: \ n \ n * 18% de Britanniques –

+0

Si pour une raison quelconque vos données d'entrée sont échappé bizarrement et vous avez en fait '\' suivi par 'n', alors juste faire: finallist = [item.replace ("\\ n", "\ n"). strip() pour l'élément dans la nouvelle liste] – sunetos

1

ouvert ("data.dat") lire() - Lit tous les symboles dans le fichier, pas seulement ceux que vous voulez. Si vous n'avez pas besoin de '\ n', vous pouvez essayer content.replace ("\ n", "") ou lire des lignes (pas tout le contenu) et tronquer le dernier symbole '\ n' de chaque ligne.

0

Cela va également diviser tout astérisque que vous avez dans le texte.

Une meilleure mise en œuvre serait de faire quelque chose comme:

lines = [] 

for line in open("data.dat"): 
    if line.lstrip.startswith("*"): 
     lines.append([line.strip()]) # append a list with your line 
    elif line.lstrip.startswith("-"): 
     lines[-1].append(line.strip()) 

Pour plus de devoirs, la recherche ce qui se passe lorsque vous utilisez la fonction open() de cette façon.

0

Ce qui suit permet de résoudre votre problème, je crois:

result = [ [subitem.replace(r'\n\n', '\n') for subitem in item.split('\n-')] 
      for item in open('data.txt').read().split('\n*') ] 

# now let's pretty print the result 
for i in result: 
    print '***', i[0], '***' 
    for j in i[1:]: 
     print '\t--', j 
    print 

Remarque je partage sur la nouvelle ligne + * ou -, de cette façon il ne sera pas divisé sur des tirets à l'intérieur du texte. Aussi je remplace la séquence de caractères textuels \n\n (r'\n\n') avec un nouveau caractère de ligne '\n'. Et l'expression one-liner est la compréhension de la liste, une façon de construire des listes dans un seul gulp, sans multiples .append() ou +

Questions connexes