Ich versuche dieses Programm zu lösen

"Verwenden Sie urllib, um die vorherige Übung von zu wiederholen

(1) Abrufen des Dokuments von einer URL (2) Anzeigen von bis zu 3000 Zeichen und (3) Zählen der Gesamtzahl der Zeichen im Dokument. Tu es nicht

Sorgen Sie sich um die Überschriften für diese Übung, zeigen Sie einfach die ersten 3000

Zeichen des Dokumentinhalts. "

Und hier ist, was ich mir ausgedacht habe, was mir das Ergebnis liefert, aber ich habe mich gefragt, ob es eine Möglichkeit gibt, dies ohne Verwendung von Listen zu tun

import urllib.request, urllib.parse, urllib.error


user_url = input("Enter a link: ")
if len(user_url) < 1 : user_url = 'http://data.pr4e.org/romeo-full.txt'
try :
fhand = urllib.request.urlopen(user_url)
except :
    print("Enter a proper URL", user_url)
    quit()

lst = list()
count = 0
for line in fhand :
    words = line.decode().split()
    for word in words :
        #print(word)
        for char in word :
            count = count + 1
            lst.append(char)
print(lst[:3001])
print(count)
1
Maziar 18 Jän. 2019 im 16:14

3 Antworten

Beste Antwort

Es gibt keine akzeptierte Antwort, warum? Es gibt 2 Antworten auf "(2) Anzeigen von bis zu 3000 Zeichen" und wenn Sie die Länge der Datei erhalten möchten "(3) Zählen der Gesamtzahl der Zeichen im Dokument". (Dies funktioniert mindestens mit TXT-Dokumenten.) Sie können den folgenden Code verwenden.

import urllib.request, urllib.parse, urllib.error

user_url = 'http://data.pr4e.org/romeo-full.txt'
fhand = urllib.request.urlopen(user_url)
result = fhand.read() 
print(len(result))

Dies ist ein leicht modifizierter ForceBru-Code.

0
N00b 23 Jän. 2019 im 11:47

Ein Ansatz, wenn Sie Leerzeichen in Zeichen vermeiden und nur 3000 Zeichen behalten müssen.

char_count = 30
curr_char_count = 0
complete_str = ""
for line in fhand :
    new_line = line.decode().replace(" ", "")
    if len(complete_str) + len(new_line) <= char_count:
        complete_str = complete_str + new_line
    else:
        complete_str = complete_str + new_line[:((len(complete_str)+len(new_line)) - char_count)]
        break

print complete_str
0
Jay 18 Jän. 2019 im 13:37

Du kannst tun:

fhand = urllib.request.urlopen(user_url)
result = fhand.read(3000) # read 3000 BYTES (since it's not specified what a 'character' is)

Oder alles lesen, 3000 Zeichen dekodieren und ausgeben:

result = fhand.read().decode()[:3000] # note that whitespace is a character too
0
ForceBru 18 Jän. 2019 im 13:23