Разбор простого текстового файла с использованием Python - PullRequest
1 голос
/ 14 января 2012

Я модератор форума и мне нужно удалить всех ботов, которые там регистрируются.
Как вы можете видеть ниже, я могу перечислить всех пользователей по:

Username number_of_mssages register_date

Пример:

- Thurman Valsin0190    0       Sat Jan 14, 2012 5:00 pm
- Rubye Tones01AD   0       Sat Jan 14, 2012 4:59 pm

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

- Thurman Valsin0190
- Rubye Tones01AD

Это означает, что программа должна удалить для каждой строки 0 и все, что за ним. Текст взят из .txt файла .
Я знаю, что это не так сложно, но я не сильно разбираюсь в Python. Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 14 января 2012

рассмотрите возможность использования регулярных выражений:

import re

pattern = re.compile(r'(.*?)\s+0\s+')
pattern.findall('- Thurman Valsin0190    0       Sat Jan 14, 2012 5:00 pm')[0] 
# - Thurman Valsin0190
3 голосов
/ 14 января 2012

На самом деле это не вопрос Python, это вопрос разбора регулярных выражений / строк ...

Правильно ли говорить, что каждая строка содержит псевдоним, символ табуляции, а затем 0?

Тогда это должно быть просто:

(при условии, что строка содержит одну строку из файла)

nickname = line.split("\t")[0]
1 голос
/ 14 января 2012

Почему бы не разделить на 0 с начальными пробелами (или символами табуляции), включенными как часть ключа разделения, чтобы избежать разделения других нулей:

with open("filename.txt", "r") as f:
    for line in f:
        nick = line.split(" 0 ")[0].strip() # OR .split("\t0\t") if those are tabs
        print nick
0 голосов
/ 14 января 2012

Разобрать, разбив на " 0 " строку, например, extract-nickname.py:

#!/usr/bin/env python
import fileinput

for line in fileinput.input():
    nick, sep, rest = line.partition(" 0 ")
    if sep:
       print(nick.strip())

Предполагается, что псевдонимы не могут содержать " 0 ", а начальные / конечные пробелы не являются частью псевдонима. В противном случае вы можете использовать line.partition("\t"), если символ табуляции является разделителем между Username и number_of_mssages.

Пример

$ python extract-nickname.py log.txt
- Thurman Valsin0190
- Rubye Tones01AD

Если вам нужно изменить файл на месте, вы можете указать для параметра inplace=True значение fileinput.input().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...