2016-08-06 45 views
0

Dieser Fehler ist schwer zu beschreiben, weil ich nicht herausfinden kann, wie die Schleife die Methoden readline() und readlines() betrifft. Wenn ich versuche, den ersten zu verwenden, bekomme ich diese unerwarteten Traceback-Fehler. Wenn ich letzteres versuche, läuft mein Code und nichts passiert. Ich habe festgestellt, dass der Fehler in den ersten acht Zeilen liegt. Die ersten paar Zeilen der Topics.txt Datei werden gepostet.readlines() Fehler mit for-Schleife in Python

Code

import requests 
from html.parser import HTMLParser 
from bs4 import BeautifulSoup 

Url = "https://ritetag.com/best-hashtags-for/" 
Topicfilename = "Topics.txt" 
Topicfile = open(Topicfilename, 'r') 
Line = Topicfile.readlines() 
Linenumber = 0 
for Line in Topicfile: 
    Linenumber += 1 
    print("Reading line", Linenumber) 

    Topic = Line 
    Newtopic = Topic.strip("\n").replace(' ', '').replace(',', '') 
    print(Newtopic) 
    Link = Url.join(Newtopic) 
    print(Link) 
    Sourcecode = requests.get(Link) 

Als ich dieses Stück hier laufen, den die URL nach dem ersten Zeichen des line.For Beispiel voran druckt, druckt es als 2https: //ritetag.com/best -Hashtags-für/4https: //ritetag.com/best-hashtags-for/Hhttps: //ritetag.com/best-hashtags-for/ etc. für 24 Stunden Fitness.

Topics.txt

  • 21st Century Fox
  • 24 Hour Fitness
  • 2K Games
  • 3M

Full Error

Leselinie 1 24HourFitness 2https: //ritetag.com/best-hashtags-for/4https: //ritetag.com/best-hashtags-for/Hhttps: //ritetag.com/best-hashtags- für/ohttps: //ritetag.com/best-hashtags-for/uhttps: //ritetag.com/best-hashtags-for/rhttps: //ritetag.com/best-hashtags-for/Fhttps: // ritetag. com/beste-hashtags-for/ihttps: //ritetag.com/best-hashtags-for/thttps: //ritetag.com/best-hashtags-for/nhttps: //ritetag.com/best-hashtags-for/ ehttps: //ritetag.com/best-hashtags-for/shttps: //ritetag.com/best-hashtags-for/s

Traceback (letzter Aufruf zuletzt): Datei "C: \ Users \ Caden \ Desktop \ Programme \ LususStudios \ AutoDealBot \ HashtagScanner.py ", Zeile 17, in Sourcecode = requests.get (Link) Datei "C: \ Python34 \ lib \ Site-Pakete \ Anfragen-2.10.0-py3.4.egg \ requests \ api.py", Zeile 71, in get Anfrage zurücksenden ('get', url, params = params, ** kwargs) Datei "C: \ Python34 \ lib \ site-Pakete \ requests-2.10.0-py3.4.egg \ requests \ api.py", Zeile 57 , in Anfrage return session.request (Methode = Methode, URL = URL, ** kwargs) Datei "C: \ Python34 \ lib \ Site-Pakete \ Anfragen-2.10.0-py3.4.egg \ Anfragen \ Sitzungen. py ", Zeile 475, in Anfrage resp = self.send (prep, ** send_kwargs) Datei" C: \ Python34 \ lib \ Site-Pakete \ Anfragen-2.10.0-py3.4.egg \ Anfragen \ Sitzungen .py ", Zeile 579, in send adapter = self.get_adapter (url = request.url) Datei" C: \ Python34 \ lib \ site-Pakete \ requests-2.10.0-py3.4.egg \ requests \ sessions.py ", Linie 653, in get_adapter raise InvalidSchema (% url "Keine Anschlussadapter wurden für '% s' gefunden") requests.exceptions.InvalidSchema: Keine Anschlussadapter wurden für ‚2https gefunden: //ritetag.com/best- Hashtags-für/4https: //ritetag.com/best-hashtags-for/Hhttps: //ritetag.com/best-hashtags-for/ohttps: //ritteag.com/best-hashtags-for/uhtps: // ritetag.com/best-hashtags-for/rhttps://ritetag.com/best-hashtags-for/Fhttps://ritetag.com/best-hashtags-for/ihttps://ritetag.com/best-hashtags- for/thttps: //ritetag.com/best-hashtags-for/nhttps: //ritetag.com/best-hashtags-for/ehttps: //ritetag.com/best-hashtags-for/shttps: // ritetag.com/best-hashtags-for/s

+0

Die Datei wird in einem Rutsch mit 'Line = Topicfile.readlines()' gelesen. Einfach diese Linie eliminieren. – dawg

+0

Unter der Haube "konsumiert" die * readlines * -Methode die Datei. Wenn sie zurückkehrt, befindet sich der Zeiger der zugrunde liegenden Dateiposition am Ende der Datei. Dann versuchst du, die Datei etwas mehr in der for-Schleife zu lesen, aber da sie schon am Ende ist, tut sie nichts. Verwenden Sie nur eine der beiden Methoden. – Keith

Antwort

1

tun Ich denke, es gibt zwei Probleme:

  1. Sie scheinen über Topicfile statt Topicfile.readLines() zu iterieren.
  2. Url.join(Newtopic) gibt nicht zurück, was Sie denken, dass es ist. .join nimmt eine Liste (in diesem Fall ist eine Zeichenfolge eine Liste von Zeichen) und wird Url dazwischen einfügen.

Hier ist der Code, mit diesen Problemen angesprochen:

import requests 

Url = "https://ritetag.com/best-hashtags-for/" 
Topicfilename = "topics.txt" 
Topicfile = open(Topicfilename, 'r') 
Lines = Topicfile.readlines() 
Linenumber = 0 
for Line in Lines: 
    Linenumber += 1 
    print("Reading line", Linenumber) 

    Topic = Line 
    Newtopic = Topic.strip("\n").replace(' ', '').replace(',', '') 
    print(Newtopic) 
    Link = '{}{}'.format(Url, Newtopic) 
    print(Link) 
    Sourcecode = requests.get(Link) 

Als Nebenwirkung, auch kleingeschrieben Variablennamen verwenden Ich empfehle da Kamel Fall in der Regel für Klassennamen in Python reserviert ist :)

+0

Ja, danke! Ich habe nicht einmal an die angrenzenden Variablen gedacht, die die For-Schleife beeinflussen. Ich habe meinen Code zu 'Link = Url + Newtopic' überarbeitet. – Capattax

+0

Sie sind herzlich willkommen :) – Karin

0

Erstens, Python-Konventionen sollen alle Variablennamen klein geschrieben werden.

Zweitens erschöpfen Sie den Dateizeiger, wenn Sie zuerst alle Zeilen lesen und dann weiter über die Datei schleifen.

Versuchen Sie einfach die Datei zu öffnen, dann Schleife über sie

linenumber = 0 
with open("Topics.txt") as topicfile: 
    for line in topicfile: 
     # do work 
     linenumber += 1 

das Problem in der Zurückverfolgungs dann, wenn Sie genau hinsehen, werden Sie diese wirklich lange URL-Zeichenfolge den Aufbau und das ist definitiv nicht eine URL , so Anfragen wirft einen Fehler

InvalidSchema: No connection adapters were found for '2https://ritetag.com/best-hashtags-for/4https://ritetag.com/...

Und man kann sehen, dass debuggen Url.join(Newtopic) „Verschachtelung“ die Url String zwischen den einzelnen Zeichen des Newtopic ist Liste, das ist, was str.join