Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 11, 2017 18:51:31

Grinvel
Зарегистрирован: 2017-12-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Кортежи и вложенные циклы

Программа удаления лексем, находящихся в одном файле, из другого файла.
Получился такой код:

 import sys
from fileinput import fileno
try:
    f1 = open(sys.argv[1], 'r')
    f2 = open(sys.argv[2], 'r')
except FileNotFoundError:
    print('File "readFile.txt" or "leksems.txt" not found')
    exit()
f3 = open('results.txt', 'w')
for line in f1:
    for line2 in f2:
        for elements in line2.split():
            line = line.replace(elements, '')
    f3.write(line)      
    f2.seek(0)
for f in f1, f2, f3:
    f.close() 
Код рабочий, но должен быть написан в функциональном стиле.
Для этого необходимо объединить первые два цикла через кортеж, т.е. одновременное чтение файлов в одном цикле с помощью кортежа, но не представляю, как это можно реализовать.
Прошу вашей помощи в данном вопросе.

Офлайн

#2 Дек. 12, 2017 17:50:24

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Кортежи и вложенные циклы

Зачем тебе fileno, если ты его нигде не используешь? Функциональное программирование? А сделать так нельзя?:

 import sys
def func():
    try:
        f1 = open(sys.argv[1], 'r')
        f2 = open(sys.argv[2], 'r')
    except FileNotFoundError:
        print('File "readFile.txt" or "leksems.txt" not found')
        exit()
    f3 = open('results.txt', 'w')
    for line in f1:
        for line2 in f2:
            for elements in line2.split():
                line = line.replace(elements, '')
        f3.write(line)      
        f2.seek(0)
    for f in f1, f2, f3:
        f.close() 



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

#3 Дек. 12, 2017 21:09:03

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Кортежи и вложенные циклы

Почему бы не воспользоваться регулярными выражениями, чтобы было проще?

 import re, sys
skip_lexems = "|".join(open(sys.argv[1], 'r').split("\n"))
src = open(sys.argv[2], 'r').read()
open("results.txt", "w").write(re.sub(skip_lexems, "",  src))

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version