#python
Вопрос:
Я соскабливаю данные из списка URL (input.txt) и сохранение данных в output.txt
Я хочу удалить эти URL-адреса из входного файла, как только они будут очищены в цикле.
Это мой код:
def scrape(url):
//do scraping and return json
return json
with open("input.txt",
'r ') as urllist, open('output.txt',
'a ') as outfile:
for url in urllist.read().splitlines():
data = scrape(url)
if data:
if data['products'] is None:
print("data NOT FOUND: %s")
else:
for product in data['products']:
print("Saving data: %s" % product['data'])
outfile.write(product['data'])
outfile.write("n")
Я включил этот код в цикл, чтобы удалить URL-адрес, когда он проходит через цикл, но он удаляет все URL-адреса сразу, а не по одному
#start new code
d = urllist.readlines()
urllist.seek(0)
for i in d:
if i != url:
urllist.write(i)
input.txt файл содержит следующие данные:
url1
url2
url3
В то время как output.txt файл:
data1
data2
data3
Я имею в виду этот код
Комментарии:
1. Можете ли вы предоставить образец ввода? И в какой цикл вы вставили этот 2-й фрагмент кода? Будет легче помочь, если вы просто поделитесь примером ввода, вашим текущим сценарием, который не работает, и проблемой, которую вы видите. Затем другие пользователи переполнения стека могут просто копировать, вставлять, запускать, а затем отлаживать.
2. В настоящее время ваш скрипт выдает ошибку (после исправления комментария в строке 2): Ошибка имени: имя «json» не определено. Пожалуйста, либо предоставьте свой полный сценарий, либо рабочий пример.
3. Я ссылаюсь на этот код
Ответ №1:
Я поделился примером удаления строки из файла после использования этой строки. Обратите внимание, что я добавил функцию с именем «printFileContents», чтобы показать вам, что происходит с содержимым файла после каждой итерации очистки. Эта функция на самом деле не нужна, просто приятно визуализировать происходящее. См. Пример ниже:
def scrape(url):
# Do some stuff
return True
def executeScrapeIteration(input_file):
# Get the first line in the file
url = input_file.readline()
# Do your scraping and whatever else
scrape(url)
# To remove the line you just used, you have to rewrite the file, but don't include that line
lines = input_file.readlines()
input_file.seek(0)
input_file.truncate()
for line in lines:
if line != url:
input_file.write(line)
# This function is just to show you what happens to the file after each scrape iteration
def printFileContents(input_file, i):
input_file.seek(0)
print("-----------------")
print("After iteration " str(i) ":n")
print(input_file.read())
print("n-----------------nn")
input_file.seek(0)
# main function
if __name__=="__main__":
with open("input.txt",'r ') as input_file:
# Count the lines and then reset the pointer to 0 position
line_count = len(input_file.readlines())
input_file.seek(0)
# While the file still contains url, execute an iteration of scraping
for x in range(0, line_count):
executeScrapeIteration(input_file)
printFileContents(input_file, x)
Мой input.txt файл выглядит следующим образом:
url1
url2
url3
Просто скопируйте/вставьте мой скрипт на python и input.txt файл, затем запустите сценарий python.