Python запись файлов с помощью write (), Writelines (), to_csv () не работает - PullRequest
0 голосов
/ 14 июля 2020

Я запускаю фрагмент кода, который принимает ввод из текстового файла, использует ввод для очистки веб-страницы tor, а затем выдает список строк с именем result. Пользуюсь модулем tbselenium. Мне нужно записать этот список в два выходных файла valid.txt и address.txt, когда я запускаю скрипт, я получаю результат (список строк), но в два выходных файла ничего не записывается. Ошибка не возникает, и операторы печати внутри двух функций работают отлично. Входные данные успешно прочитаны.

from tbselenium.tbdriver import TorBrowserDriver
import requests
import time
import pandas as pd

def read_input():
    with open('Entries.txt') as fp:
        users = fp.readlines()
    return users

users = read_input()
result = some_function(users) # This function scrapes the webpage using selenium

def write_output(result):
    with open('valid.txt', 'a+') as fw:
        fw.writelines(result)
        print('Writing to valid.txt', result)


def write_addr(result):
    with open('address.txt', 'a+') as fw:
        for x in result:
            fw.write(x.split(':')[5]+'\n')
            print('Writing to address.txt')

write_output(result)
write_addr(result)

Затем я попытался записать тот же результат в файл csv.

df = pd.DataFrame(result)
print(df)
df.to_csv('valid.csv', mode='a', header=False)

DataFrame создан, но в файл csv ничего не записывается. Он даже не создается, если я еще не создал его в своей папке. Если я не запустил функцию очистки и не попытаюсь записать что-нибудь в выходные файлы, то все заработает.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Решено. При запуске драйвера селена он изменяет текущий рабочий каталог на каталог, в котором находится браузер tor, и, следовательно, все файлы сохраняются в нем.

0 голосов
/ 14 июля 2020
import pandas as pd

def write_output(result):
    with open('valid.txt', 'a+') as fw:
        fw.writelines(result)
        print('Writing to valid.txt', result)


def write_addr(result):
    with open('address.txt', 'a+') as fw:
        for x in result:
            fw.write(x.split(':')[5]+'\n')
            print('Writing to address.txt')

result = ['I am :scrap:ed d:ata:from tor wit:h add:ress:es\n', 'I am :scrap:ed d:ata:from tor wit:h add:ress:es\n', 'I am :scrap:ed d:ata:from tor wit:h add:ress:es\n']

write_output(result)
write_addr(result)
df = pd.DataFrame(result)
print(df)
df.to_csv('valid.csv', mode='a', header=False)

Я не обнаружил никаких проблем с вашим кодом (по крайней мере, с функциями записи, которые у вас есть для создания valid.txt, addrress.txt и valid.csv). Я проверил ваш код на собственном фиктивном результате. Как видно из прикрепленных изображений, соответствующие файлы были созданы успешно. Я подозреваю, что ошибка может быть из вашего списка результатов. Вы также должны убедиться, что 5-й индекс после разделения (':') не является пробелом, и обратите внимание, что файлы будут созданы в каталоге, из которого открывается скрипт python (если вы ищете файлы в неправильном каталоге). В остальном желаемые функции должны работать должным образом при условии, что результат будет возвращен функцией очистки веб-страниц. Ура

введите описание изображения здесь

...