Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Нужен несложный парсер. (https://forum.antichat.xyz/showthread.php?t=130462)

fasty 19.07.2009 15:51

Нужен несложный парсер.
 
Вобщем нужно из такого вида акков:
mail@mail.ru
password
-----------------
Сделать

mail@mail.ru:password


Кто сможет помогите,заранее благодарен.

Fata1ex 19.07.2009 15:58

Вид файла:
Код:

мыло1
пасс1
мыло2
пасс2

?

fasty 19.07.2009 16:05

мыло1
пасс1

мыло2
пасс2

мыло3
пасс3

mailbrush 19.07.2009 16:14

PHP код:

<?php

$i 
1;
foreach (
file('mails.txt') as $line)
{
    
$line trim($line);
    if (
$line)
    {
        
$i++;
        if (!(
$i 2))
            echo 
$line;
        else
            echo 
';' $line "<br>\r\n";
    }
}

?>

Без использования регулярок, прочих функций - только цикл и эхо.

fasty 19.07.2009 16:26

Спасибо большое.

Fata1ex 19.07.2009 16:38

Я опоздал :(
Хотя у mailbrush'a, по-моему, что-то не то :)
added: у него все то, просто я кривой :(

Код:

#!/usr/bin/env python3

import sys

filename = sys.argv[1]
emails = []
passwords = []
tmp = 1
 
for line in open(filename):
    if line.strip():
        emails.append(line.strip()) if tmp % 2 == 1 else passwords.append(line.strip())
        tmp += 1
           
for i in range(len(emails)):
    temp = emails[i] + ':' + passwords[i]
    print(temp, file = open("out.txt", "a"))

in.txt
Код:

lala@mail.ru
password1

coco@mail.ru
password2

kaka@mail.ru
password3

out.txt
Код:

lala@mail.ru:password1
coco@mail.ru:password2
kaka@mail.ru:password3

сделал чуть короче (

mailbrush 19.07.2009 16:41

Fata1ex, мой работает :)
added: не увидел added :)

cupper 19.07.2009 20:23

Код:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
# Водной файл берем либо из параметра при запуске скрипта, либо по дефолту input.txt
# Запис производиться в файл output.txt
try:
        filename = sys.argv[1]
        print "Используется файл с данными " + filename,
except IndexError:
        print "Испольуется стандартный файл с данными input.txt",
        filename="input.txt"

try:
        f1 = open(filename, "r")
        f2 = open("output.txt", "w")
except IOError:
        print "Чёта я файл открыть немогу :("
        exit(1)

while 1:
          f2.write(f1.readline()[0:-1] + ':' + f1.readline())
          print temp,
          sNull = f1.readline()
          if not sNull:
                  break
         
f2.close()
f1.close()

Вход
Код:

AdfsdA
222222

BsfsddfB
444444

CgjjjfggdfC
444444

Выход:
Код:

AdfsdA:222222
BsfsddfB:444444
CgjjjfggdfC:444444

Чем он лучьше скрипта написанного Fata1ex:
1.
Код:

for line in open(filename):
    if line.strip():
        emails.append(line.strip()) if tmp % 2 == 1 else passwords.append(line.strip())
        tmp += 1

Объем используемой оперативки на прямую хависит от объема вхоного файла - это Бэд
2.
Код:

for i in range(len(emails)):
    temp = emails[i] + ':' + passwords[i]
    print(temp, file = open("out.txt", "a"))

Зачем столько раз открывать файл на дозапись ?

PHP незнаю, так что тут молчу.
PS. все сделано исключительно в образовательных целях, и только ради интереса

mailbrush 19.07.2009 21:49

Ну или самый короткий вариант:
PHP код:

<?php

$i 
1;
foreach (
file('mails.txt') as $line)
{
    
$line trim($line);
    if (
$line)
    {
        
$i++;
        echo 
$i ';' $line "<br>\r\n" $line;
    }
}

?>


login999 19.07.2009 23:08

cupper, ты не прав насчет первой претензии к фаталексу, он не читает файл в оперативку, конструкция open(filename) не читает файл, а получает хэндлер на него, а когда он делат for line in filehandler то там идет итератор и построчное чтение, так что это пох :D, насчет второго - это маленькие слабости py3k , там поправить -дело пары сек, нужно просто в print передавать хэндлер, но это так лирика :D
И раз уж меряетесь пиписьками, то всуну и я свою кривую реализацию

Код:

#! usr/bin/env python
#-*-encoding:cp1251-*-

try:
    with open("input.txt") as inpt:
        with open("out.txt", "a") as out:
            account = {"mail":None,
                      "password":None}
            for line in inpt:
                line = line.translate(None, "\r\n")
                if not line:
                    out.write("{0}:{1}\n".format(account["mail"], account["password"]))
                    account["mail"] = None
                    account["password"] = None
                elif not account["mail"]:
                    account["mail"] = line
                elif not account["password"]:
                    account["password"] = line
except Exception, e:
    print e

на входе input.txt, на выходе будет out.txt
P.S. cupper, понял что смутило в твоем коде - бесконечный цикл

Fata1ex 19.07.2009 23:13

Эм. Я ни с кем не мерился..и не претендовал на совершенство. Лишь на работоспособность. Так что низачет.

login999 19.07.2009 23:17

Цитата:

Сообщение от Fata1ex
Эм. Я ни с кем не мерился..и не претендовал на совершенство. Лишь на работоспособность. Так что низачет.

Да ладно :)

Я пошутил, хз как назвать когда человеку попросившему написать парсер предлагают 1 реализацию на PHP и две реализации на Python :D

Fata1ex 19.07.2009 23:20

Я не про тебя, тебе всегда зачет:)

cupper 19.07.2009 23:31

Цитата:

ты не прав насчет первой претензии к фаталексу
а причем тут хендел файла, я про списокписал
Цитата:

emails.append(line.strip()) ... passwords.append(line.strip()
про то что он весь файл в него сперва загоняет

Цитата:

P.S. cupper, понял что смутило в твоем коде - бесконечный цикл
хороший цикл :), а если чтото насторазивает в нем, то такой цикл взят из учебной литературы. Мне он оч даже приглянулся

Цитата:

офтоп:
Цитата:

Эм. Я ни с кем не мерился..и не претендовал на совершенство. Лишь на работоспособность. Так что низачет.
яж написал все только в учебных целях. Если я написал что в коде можно чтото сделать лучьше, это невкоем случае незначит что его кодил плохой кодер,... проста ленивый кодер )))

Fata1ex 19.07.2009 23:45

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

login999 20.07.2009 00:34

Цитата:

Сообщение от cupper
а причем тут хендел файла, я про списокписал

про то что он весь файл в него сперва загоняет


хороший цикл :), а если чтото насторазивает в нем, то такой цикл взят из учебной литературы. Мне он оч даже приглянулся



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

Ы) Недоглядел, вопросов нет :)
П.С. Девочки не ссорьтесь :D

Fata1ex 20.07.2009 00:37

Та мы не ссоримся, просто я обидчивая :)

Fata1ex 23.07.2009 02:52

аааааааа! сорри ) ток сейчас вспомнил, что обещал дописать :)
Код:

#!/usr/bin/env python3

tmp = 1
 
with open(str(input("Enter file name: "))) as fin:
    with open("out.txt", "a") as fout:
        for line in fin:
            if line.strip():
                fout.write(line.strip() + ':') if tmp % 2 == 1 else fout.write(line)
                tmp += 1

вот :) вроде оптимизировано

сделал меньше еще на строчку :D


ps. cupper, жду замечаний ) с обработкой исключений иди доить корову :D

уменьшил еще на строчку оО )


Время: 11:04