Найти - Пользователи
Полная версия: Кортежи и вложенные циклы
Начало » Python для новичков » Кортежи и вложенные циклы
1
Grinvel
Программа удаления лексем, находящихся в одном файле, из другого файла.
Получился такой код:
 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() 
Код рабочий, но должен быть написан в функциональном стиле.
Для этого необходимо объединить первые два цикла через кортеж, т.е. одновременное чтение файлов в одном цикле с помощью кортежа, но не представляю, как это можно реализовать.
Прошу вашей помощи в данном вопросе.
DamMercul
Зачем тебе 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() 
Isem
Почему бы не воспользоваться регулярными выражениями, чтобы было проще?
 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))

Что касается исключений, то бессмысленно их ловить, интерпретатор и так все скажет.
Если в исходном файле есть какие-то символы пересекающиеся с командами регулярных выражений (кроме, наприемр, букв и цифр), то добавлением еще одной строчки проблема решается.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB