2017-09-29 16 views
0
d = feedparser.parse('somerssfeed/rss.xml') 
message = {} 
smessage = {} 

for post in d.entries: 
    message[post.link] = post.title 

fwrite = open("db.txt", "a") 

for k, v in message.items(): 
    if k in open("db.txt", "r"): 
     print("already exists") 
    else: 
     fwrite.write("\n" + "{0}".format(k) + "\n") 
     smessage[k] = v 

Ce que je veux réaliser est l'analyse des flux RSS et écrire leurs liens dans un fichier texte. Mais le problème est quand je cours le manuscrit la prochaine fois qu'il ne devrait pas renvoyer de vieux articles de rss ainsi je les compare par l'intermédiaire du dossier de texte sauf qu'il échoue. Le premier terme, il écrit tous les liens, deuxième manche, il devrait revenir à vide parce que tous les liens sont les mêmes, mais il écrit à nouveau les mêmes liensPython et comparaison des modifications de fichier

EDIT:

après une journée de tâtonnement cela a fonctionné:

for k, v in message.items(): 
    if k in open('db.txt').read(): 
     print('already exists') 
    else: 
     smessage[k] = v 
     fwrite = open("db.txt", "a") 
     fwrite.write('\n{0}\n'.format(k)) 
     fwrite.close() 
+0

Bienvenue à SO. S'il vous plaît, prenez le temps de lire [ask] et les liens qu'il contient. – wwii

+1

En aparté: Puisque vous utilisez déjà 'str.format' -' ("\ n" + "{0}". Format (k) + "\ n") 'peut aussi être écrit comme' ("\ n {0} \ n ".format (k))'. – wwii

Répondre

1

Vous n'utilisez pas la bonne syntaxe pour ouvrir le fichier. Utilisez ceci:

g = open("db.txt","r") 
lines = xml_file.readlines() 
if k in lines: 
    print ("already exists"); 
+0

il ré-insérant encore les mêmes résultats – fuzunspm

+0

OP formate la chaîne avant de l'écrire, peut-être 'k' doit être formaté pour être équivalent. Vous voudrez probablement juste appeler '.readlines()' une fois et l'assigner à un nom au lieu de l'appeler pour chaque 'k' '. – wwii

+0

La sortie d'impression de xml_file.readline() est seulement la première ligne. – fuzunspm