Просмотр полной версии : Нужен несложный парсер.
Вобщем нужно из такого вида акков:
mail@mail.ru
password
-----------------
Сделать
mail@mail.ru:password
Кто сможет помогите,заранее благодарен.
Вид файла:
мыло1
пасс1
мыло2
пасс2
?
мыло1
пасс1
мыло2
пасс2
мыло3
пасс3
mailbrush
19.07.2009, 16:14
<?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";
}
}
?>
Без использования регулярок, прочих функций - только цикл и эхо.
Я опоздал :(
Хотя у 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 :)
#!/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
$i = 1;
foreach (file('mails.txt') as $line)
{
$line = trim($line);
if ($line)
{
$i++;
echo $i % 2 ? ';' . $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, понял что смутило в твоем коде - бесконечный цикл
Эм. Я ни с кем не мерился..и не претендовал на совершенство. Лишь на работоспособность. Так что низачет.
login999
19.07.2009, 23:17
Эм. Я ни с кем не мерился..и не претендовал на совершенство. Лишь на работоспособность. Так что низачет.
Да ладно :)
Я пошутил, хз как назвать когда человеку попросившему написать парсер предлагают 1 реализацию на PHP и две реализации на Python :D
Я не про тебя, тебе всегда зачет:)
ты не прав насчет первой претензии к фаталексу
а причем тут хендел файла, я про списокписал
emails.append(line.strip()) ... passwords.append(line.strip()
про то что он весь файл в него сперва загоняет
P.S. cupper, понял что смутило в твоем коде - бесконечный цикл
хороший цикл :), а если чтото насторазивает в нем, то такой цикл взят из учебной литературы. Мне он оч даже приглянулся
офтоп:
Эм. Я ни с кем не мерился..и не претендовал на совершенство. Лишь на работоспособность. Так что низачет.
яж написал все только в учебных целях. Если я написал что в коде можно чтото сделать лучьше, это невкоем случае незначит что его кодил плохой кодер,... проста ленивый кодер )))
Я чаще всего именно так делаю, потому что впоследствии может понадобиться делать с данными что-то еще, тогда код изменить будет легче: пароли и мыла уже считаны в удобном виде и готовы к работе. Сейчас с телефона, утром могу оптимизировать.
И если кто не понял, я согласен, что код не самый удачный и в определенных моментах будет вести себя плохо:(
login999
20.07.2009, 00:34
а причем тут хендел файла, я про списокписал
про то что он весь файл в него сперва загоняет
хороший цикл :), а если чтото насторазивает в нем, то такой цикл взят из учебной литературы. Мне он оч даже приглянулся
яж написал все только в учебных целях. Если я написал что в коде можно чтото сделать лучьше, это невкоем случае незначит что его кодил плохой кодер,... проста ленивый кодер )))
Ы) Недоглядел, вопросов нет :)
П.С. Девочки не ссорьтесь :D
Та мы не ссоримся, просто я обидчивая :)
аааааааа! сорри ) ток сейчас вспомнил, что обещал дописать :)
#!/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
уменьшил еще на строчку оО )
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot