Удалите определенную строку из txt-файла на python

#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.