2015-05-28 11 views
6

Ci scusiamo per questa domanda molto semplice. Sono nuovo di Python e sto provando a scrivere uno script che può stampare i collegamenti URL. Gli indirizzi IP sono memorizzati in un file chiamato list.txt. Come dovrei usare la variabile nel link? Potresti per favore aiutare?utilizzando la variabile in un URL in python

# cat list.txt 

192.168.0.1 
192.168.0.2 
192.168.0.9 

script:

import sys 
import os 

file = open('/home/list.txt', 'r') 

for line in file.readlines(): 
    source = line.strip('\n') 
    print source 

link = "https://(source)/result” 
print link 

uscita:

192.168.0.1 
192.168.0.2 
192.168.0.9 
https://(source)/result 

uscita prevista:

192.168.0.1 
192.168.0.2 
192.168.0.9 
https://192.168.0.1/result 
https://192.168.0.2/result 
https://192.168.0.9/result 

risposta

2

Prova questo:

lines = [line.strip('\n') for line in file] 

for source in lines: 
    print source 

for source in lines: 
    link = "https://{}/result".format(source) 
    print link 

La funzione che hai appena descritto viene spesso chiamata string interpolation. In Python, questo è chiamato string formatting.

Ci sono due stili di formattazione delle stringhe in Python: il vecchio stile e il nuovo stile. Quello che ho mostrato nell'esempio sopra è il nuovo stile, in cui ci formiamo con un metodo stringa chiamato format. Mentre il vecchio stile utilizza l'operatore %, ad es. "https://%s/result" % source

2

Ottieni il collegamento all'interno del ciclo, non stai aggiungendo dati ad esso, lo stai assegnando ogni volta. Usa qualcosa come questo:

file = open('/home/list.txt', 'r') 

for line in file.readlines(): 
    source = line.strip('\n') 
    print source 
    link = "https://%s/result" %(source) 
    print link 
1
import sys 
import os 

file = open('/home/list.txt', 'r') 

for line in file.readlines(): 
    source = line.strip('\n') 
    print source 
    link = "https://" + str(source) + "/result” 
    print link 
6

È necessario passare la variabile reale, è possibile iterare l'oggetto file in modo che non c'è bisogno di usare readlines e utilizzare with per aprire i file come si chiuderà loro automaticamente. È inoltre necessario l'impronta all'interno del ciclo, se si desidera vedere ogni linea e str.rstrip() consente di eliminare ogni nuove righe dalla fine di ogni riga:

with open('/home/list.txt') as f: 
    for ip in f: 
     print "https://{0}/result".format(ip.rstrip()) 

Se si desidera memorizzare tutti i collegamenti utilizzare un list comprehension:

with open('/home/list.txt' as f: 
    links = ["https://{0}/result".format(ip.rstrip()) for line in f] 

per python 2.6 si deve passare l'indice numerico di un argomento posizionale, cioè{0} usando str.format.

È inoltre possibile utilizzare i nomi di passare a str.format:

with open('/home/list.txt') as f: 
    for ip in f: 
     print "https://{ip}/result".format(ip=ip.rstrip()) 
+0

Grazie Padraic .. provato ma ottenendo questo errore. Traceback (ultima chiamata ultima): File "script.py", riga 7, in link = ["https: // {}/result" .format (line.rstrip()) per la riga in f] ValoreErrore: nome campo lunghezza zero nel formato – user3331975

+0

@ user3331975, provalo ora, stai usando python <2.7 sì? –

+0

sì, che ha aiutato Padraic – user3331975

2

Usa identificatore di formato per la stringa e anche mettere la sezione stampa di collegamento nel ciclo for unica qualcosa di simile:

import sys 
import os 
    file = open('/home/list.txt', 'r') 
    for line in file.readlines(): 
     source = line.strip('\n') 
     print source 
     link = "https://%s/result”%source 
     print link 
Problemi correlati