@ibmwatson

Как удалить строку модулем csv?

ни как не могу сообразить и найти толковый ответ в интернете, помогите пожалуйста))
Имеется скрипт, который отсылает строку из файла csv в яндекс переводчик, задача в следующем:
1. Взяли строку
2. Отправили всю строку кроме первого столбца в Я. Переводчик
3. Получили код 200 - если всё ок, удалили строку из файла которую брали и записали уже переведённую в новый файл.
4. Если не получили код 200, строку оставили в файле.
Всё в принципе и так работает, но на апи ключ есть ограничения и когда апи ключ заблокируют(более 1млн символов в день) будет код не 200, а строки терять не очень хочется, а вручную проверять достаточно геморойно, т.к. строк очень много.

Скрипт который имеется:
import requests
import time
import csv

def main():
    spamReader = csv.reader(open('text.csv', encoding="utf-8", newline=''), delimiter=',')
    for row in spamReader:
        my_text = row[1:]
        old = row[0]

        # Отправка запроса в Яндекс переводчик
        time.sleep(2)
        s = requests.Session()
        url = 'https://translate.yandex.net/api/v1.5/tr.json/translate'

        from_data = {
            'lang': 'th-ru',
            'key': 'API ключ__Бесплатный в яндексе',
            'text': my_text
        }

        answ = s.post(url, data=from_data)
        print(answ.json()) #{'code': 200, 'lang': 'th-ru', 'text': ['Результат перевода первого столбца', 'Результат перевода второго столбца']}


        if answ.json()['code'] == 200:
            result = answ.json()['text']
            result = [old] + result
            print(result)

            # Записываем результат в новый файл
            with open('result_file.csv', 'a', newline='', encoding="utf-8") as f:
                writer = csv.writer(f)
                writer.writerow(result)
                f.close()
        else:
            print('Необходимо поменять API ключ')


if __name__ == '__main__':
    main()
  • Вопрос задан
  • 924 просмотра
Пригласить эксперта
Ответы на вопрос 2
@ibmwatson Автор вопроса
Есть конечно мысль одна, если код не 200, то записываем в новый файл, но тогда ему придётся проходить все оставшиеся строки, а если их там не одна тысяча?
else:
            print('Необходимо поменять API ключ')
            with open('bad_result_file.csv', 'a', newline='', encoding="utf-8") as f:
                writer = csv.writer(f)
                writer.writerow(row)
                f.close()
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
мысль полностью верная

пишите в sql , затем sql запросом отделяете непереведенные
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы