2012-05-02 8 views
1

Я сделал скрипт Python, который читает текстовый файл, затем переходит к URL-адресу и добавляет расширение в текстовый файл к URL-адресу. Проблема заключается в том, что скрипт продолжает останавливаться, прежде чем он закончит чтение файла. Я не могу понять, почему.Почему мой код продолжает останавливаться?

import urllib 
f = open("extension/1.txt", 'r') 

for x in f.readline():  
    a = f.readline() 
    url = "http://www.link.com/whatever/%s" % a 
    print url 
    urllib.urlretrieve(url, a) 
+0

Это сделано, когда он останавливается. Может быть, вы могли бы повторить свой вопрос? – bossylobster

+0

Как далеко? в которой строка url/file останавливается? –

+0

Он имеет тенденцию меняться. – Max00355

ответ

6

Позвонив for x in f.readline():, вы будете идти через string, что первая строка файла в качестве итератора, а затем захватывая новую строку для каждого символа в первой строке через a = f.readline(). Я не думаю, что это ваше намерение.

file объекта f является итерацией сам, так что вы можете просто сделать следующее:

for line in f: 
    value = line.rstrip('\n') 
    url = "http://www.link.com/whatever/%s" % value 
    print url 
    urllib.urlretrieve(url, value) # Not sure why you want to send value (your a) here 
+0

Файл, который я загружаю, является swf-файлом, поэтому я хочу его таким образом. – Max00355

+0

Согласовано. Во время каждой итерации строка считывается в x, тогда строка считывается в a. Эффективно две строки, читаемые во время каждой итерации, и только вторая. – GrantVS

+0

Это сработало, спасибо вам большое! – Max00355

0

Возможен чтением всех строк в первом, как так:

fp = open(the_file) 
lines = fp.readlines() 
fp.close() 

for line in lines: 
    do something 
2

Ваш код выполняет следующие действия:

  1. Считывает одну строку из файла (f.readline()).
  2. Для каждого символа в этой строке (for x in f.readline()) прочитайте дополнительную строку (a = f.readline()) и обработайте ее.

Таким образом, он обрабатывает только столько строк, сколько символов в первой строке файла, и первая строка никогда не будет обработана.

Вы, вероятно, хотите, чтобы написать эту петлю как:

with open("extension/1.txt") as f: 
    for a in f: 
     a = a.strip() 
     url = "http://www.link.com/whatever/%s" % a 
     print url 
     urllib.urlretrieve(url, a) 
Смежные вопросы