Форум сайта python.su
Я нуб в Питоне, поэтому не судите строго. Вот код моего скрипта
import re fKeys = open('keys.txt','r') fCity = open('city.txt','r') fResult = open('result.txt','w') for lineKeys in fKeys: lineKeys = re.sub('\n', '', lineKeys) for lineCity in fCity: lineCity = re.sub('\n', '', lineCity) result = lineKeys+' '+lineCity fResult.write(result + '\n') fKeys.close() fCity.close() fResult.close()
футболки для беременных одежда для беременных вещи для беременных
Москва Рязань Питер
футболки для беременных Москва футболки для беременных Рязань футболки для беременных Питер
футболки для беременных Москва футболки для беременных Рязань футболки для беременных Питер одежда для беременных Москва одежда для беременных Рязань одежда для беременных Питер вещи для беременных Москва вещи для беременных Рязань вещи для беременных Питер
Офлайн
Самое простое решение - перенести одну строчку
import re fKeys = open('keys.txt','r') fResult = open('result.txt','w') for lineKeys in fKeys: lineKeys = re.sub('\n', '', lineKeys) fCity = open('city.txt','r') for lineCity in fCity: lineCity = re.sub('\n', '', lineCity) result = lineKeys+' '+lineCity fResult.write(result + '\n') fKeys.close() fCity.close() fResult.close()
Офлайн
GangПотому что во вложенном цикле вы достигли конца файла на первой же иттерации внешнего цикла, больше из него ничего не читается
Почему первый цикл for берет только первую строку из файла?
Отредактировано FishHook (Авг. 7, 2015 10:54:55)
Офлайн
Спасибо! Работает. А я то думал, что он во вложеном цикле как все отработает, тогда идет на верх во внешний, и берет новую строку.
Офлайн
GangПеред внутренним циклом выполни fCity.seek(0) (переставит указатель в начало файла).
Помогите решить проблему.
GangИ сделай with, не надо мучать close'ы.fKeys.close() fCity.close() fResult.close()
KixiroНе, оно открывает файл и потом бросает его при каждом внешнем витке. Нужно seek() использовать.
Самое простое решение - перенести одну строчку
Отредактировано py.user.next (Авг. 7, 2015 11:40:42)
Офлайн
GangТак всё и происходит, но запись итогов в файл у вас делается во внутреннем цикле, внутренний цикл отрабатывает только один раз - самый первый, после этого первого раза читать из файла больше нечего, поэтому в итоговый файл файл ничего не пишется, несмотря на то, что по внешнему циклу проходы продолжаются.
Спасибо! Работает. А я то думал, что он во вложеном цикле как все отработает, тогда идет на верх во внешний, и берет новую строку.
k = 10 for i in range(100): for j in range(k): # первый раз, когда i=1 в консоль выводится десять значений print(j) k = 0 # Всё, больше внутренний цикл выполняться не будет, он пустой
Отредактировано FishHook (Авг. 7, 2015 11:10:28)
Офлайн
И сделай with, не надо мучать close'ы.А это как? Что оно даст? Можете показать на примере, в контексте моего скрипта?
Офлайн
f1 = open('fname1') f2 = open('fname2') f3 = open('fname3') with f1, f2, f3: f1.read() f2.read() f3.read()
GangОно правильно закрывает файлы при любых условиях.
А это как? Что оно даст?
GanglineKeys = re.sub('\n', '', lineKeys)
line = line.rstrip('\n')
Отредактировано py.user.next (Авг. 7, 2015 14:02:43)
Офлайн
py.user.next
Спасибо!
Офлайн
Сделал так
fKeys = open('keys.txt','r') fCity = open('city.txt','r') fResult = open('result.txt','w') for lineKeys in fKeys: lineKeys = lineKeys.rstrip('\n') fCity.seek(0) for lineCity in fCity: lineCity = lineCity.rstrip('\n') result = lineKeys+' '+lineCity fResult.write(result + '\n') with fKeys, fCity, fResult: fKeys.read() fCity.read() fResult.read()
C:\Python34\python.exe "D:/Учимся Программировать/programing_pracktik/python/3/main.py" Traceback (most recent call last): File "D:/Учимся Программировать/programing_pracktik/python/3/main.py", line 16, in <module> fResult.read() io.UnsupportedOperation: not readable Process finished with exit code 1
Офлайн