Форум сайта python.su
0
Здравствуйте, есть такая задача:
Есть 1 файл. в нем к примеру 3000 строк
Есть второй файл, в нем 200 строк # это файл блек листа
Нужно что бы скрипт пробегался по этим двум файлам и создавал 3-ий файл в котором будет только строки из 1 файла без строк из второго, тобишь 2800 строк.
Вот что то никак у меня не выходит это сделать, уже все перепробовал, может подскажете как решить проблему? Вот набросок 1 из вариантов кода, вроде все должно работать …
# -*- coding: cp1251 -*-
listik = []
def main():
global listik
"""Функция запуска"""
f1 = open("1.txt", "r")
for i1 in f1.readlines():
listik.append(i1.rstrip("\n"))
for i2 in listik:
if i2 != [x.rstrip("\n") for x in open("2.txt", "r")]:
with open("3.txt", "a") as f2:
f2.write(i2 + "\n")
else: pass
f1.close()
main()
raw_input("Kon4ul ...")
Офлайн
20
Может как-то так?
Офлайн
52
Я бы сделал это так:
with open('file', 'r') as fin, open('blacklist', 'r') as fblack_list, \ open('output', 'w') as fout: black_list = set(fblack_list.read().splitlines()) for line in fin: if line.strip() not in black_list: fout.write(line)
Отредактировано fata1ex (Авг. 3, 2012 14:48:16)
Офлайн
0
Всем спасибо за ответы, но может кто сказать - почему мой вариант не работает? Он просто копирует все строки из файла 1 в файл 3 без учета блек листа, мне интересно где же я ошибку в коде допустил ?
Офлайн
20
Думаю проще добавить вывод промежуточных результатов и посмотреть что с чем сравнивается.
Офлайн
20
Всем спасибо за ответы, но может кто сказать - почему мой вариант не работает?
if i2 != [x.rstrip("\n") for x in open("2.txt", "r")]
[x.rstrip(... ]
"line1" != [ "line2", "line3" ... "line1" ]
Отредактировано EBFE (Авг. 3, 2012 22:19:52)
Офлайн
14
Пересчитывать файл в цикле, да и сложность O(len(input) * len(exclude)) не красит.
Офлайн
0
Всем спасибо, в общем сделал вот так вот:
# -*- coding: cp1251 -*-
listik = []
def deleter(x, y):
"""Функция удаления"""
x = x.rstrip("\n")
if x not in y:
with open("3.txt", "a") as f2:
f2.write(x + "\n")
def main():
"""Функция запуска"""
global listik
f1 = open("2.txt", "r")
for i1 in f1:
listik.append(i1.rstrip("\n"))
for i2 in open("1.txt", "r"):
deleter(i2, listik)
f1.close()
main()
raw_input("Kon4ul ...")
Отредактировано Mozart (Авг. 4, 2012 10:03:44)
Офлайн
857
fata1exblack_list = set(fblack_list.read().splitlines())
black_list = set(fblack_list)
Офлайн
14
MozartА зачем для каждой строчки открывать файл?
Всем спасибо, в общем сделал вот так вот:
Офлайн