Как читать CSV с помощью Pandas и читать только в 1 столбце без Sep или Delimiter - PullRequest
3 голосов
/ 07 июня 2019

У меня есть текстовый файл, который состоит из множества комбинаций паролей электронной почты, проблема в том, что он полон символов в начале или в середине.Все они могут быть заменены с помощью регулярных выражений, но моя проблема заключается в чтении TXT-файла и хранит все данные в 1 столбце.Разделитель или сентябрь нельзя использовать, поскольку каждая строка содержит так много разных символов.Даже значение по умолчанию «,» не является жизнеспособным, поскольку строки начинаются с «,», поэтому оно не будет содержать данных.

У меня уже есть скрипт, который может находить только электронные письма и удалять шумы с помощью панд и регулярных выражений, ноначальное чтение - моя проблема.Я слышал об использовании движка python над движком c, но из-за этого некоторые столбцы показывают NaN и помещают оставшуюся часть комбинированного прохода электронной почты в столбец 2.

with open(self.breach_file, 'r', encoding='utf-8') as breach_file:
            found_reader = pd.read_csv(breach_file, names=['Email'], dtype={'Email':str}, quoting=csv.QUOTE_NONE, engine='c')
            found_reader = pd.DataFrame(found_reader)
            found_reader['Email'] = found_reader['Email'].replace(symbol_dictionary_colon, ':', regex=True).replace(symbol_dictionary_no_space, '', regex=True)
            found_reader = found_reader.str.replace('?', '', regex=True).str.strip()
            loaded_list = found_reader.str.replace(symbol_dictionary_first_char, '', regex=True)
        breach_file.close()

Я просто хочу, чтобы данные быличитать в 1 столбце независимо от того, с какого символа начинается строка.Любая помощь?

PS Я пытался использовать 2 столбца, а затем, если столбец 1 NaN, то создать новый столбец с объединенными столбцами 1 и 2, но это не обеспечивает выполнимого решения.

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Таким образом, ваш файл содержит только информацию одного столбца, или другие данные содержат только пароль?Насколько большой ваш файл?

Если он не большой, вы можете сделать что-то вроде:

with open(self.breach_file, 'r', encoding='utf-8') as breach_file:
    passwords= breach_file.readlines()

pd.DataFrame({'passwords': passwords})

Если он больше, вы можете читать построчно и добавлять строки в каждойодин раз на ваш фрейм данных (но это может быть медленно).Вы также можете попробовать использовать функцию read_fwf, которая ожидает файлы фиксированной ширины и, следовательно, не ищет разделителей полей.По-видимому, он не требует, чтобы файл содержал строки одинаковой длины.Это выглядело бы так:

pd.read_fwf('fake_fixed.txt', widths= [100])

Вам нужно только убедиться, что вы используете ширину, равную как минимум самому длинному паролю.

Другая возможность - использовать

pd.read_csv('fake_fixed.txt', sep='\n')

Таким образом, вы убедитесь, что строки не разбиваются (при условии, что ваши строки разделены символами новой строки. Таким образом, вы даже можете использовать пользовательский конвертер для анализа адресов электронной почты (в случае, если вам действительно нужна только информацияодного столбца), это может сэкономить место.

0 голосов
/ 07 июня 2019

Ответ:

found_reader = pd.read_csv(breach_file, names=['Email'], dtype={'Email':str}, delimiter='\n', quoting=csv.QUOTE_NONE, engine='c')

Разделитель или сентябрь обе работы.

Кредит: https://stackoverflow.com/users/6925185/jottbe

...