Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 19.04.2017
Сообщений: 2

Цикл в цикле (for)

01.05.2017, 05:56. Показов 3905. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Хотел написать программу, которая будет открывать два csv файла и сравнивать некоторые данные и при их совпадении будет выводить на экран эти данные. Если точнее, программа должна считывать из файла название датчика и узнать, использовался ли этот датчик во втором файле. Если да, то вывести на экран его название. Содержимое файлов указанно внизу сообщения.

Код получился таким:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import csv
 
fileName = input("Введите имя файла: ") #Файл измерений
fileName2 = input("Имя второго файла: ") #Файл калибровки
with open(fileName2, "r") as csvFile2: # открыл файл калибровки
    with open(fileName, "r") as csvFile: # открыл файл измерений
        dataFromFile2 = csv.reader(csvFile2, delimiter=";") #прочитал файл калибровки
        dataFromFile = csv.reader(csvFile, delimiter=";") #прочитал файл измерений
 
        for currentRow in dataFromFile2:    #для всех строк в файле калибровки
            a = str(currentRow[2]).upper()  #присваиваю значение переменной а в третьем слолбце
           
            for currentRow1 in dataFromFile: #для всех строк в файле измерений
                if a == str(currentRow1[4]).upper() or a == str(currentRow1[5]).upper() or a == str(currentRow1[6]).upper():
                    print(a)
Содержимое первого файла:
Python
1
2
3
4
0; 0; 0; 0; COIL5; COIL6; COIL 7;
0; 0; 0; 0; AMTC123; AMCT91; AMTC20;
0; 0; 0; 0; AMTC0; AMTC00; COIL3;
0; 0; 0; 0; AMTC02; AMTCD; FOL;
Содержимое второго файла:
Python
1
2
3
4
0   0    AMTC00
0   0    AMTC01
0   0    AMTC02
0   0    COIL3
Ожидаемый результат:
Python
1
2
3
AMTC00
AMTC02
COIL3
С таким кодом программа выдает только AMTC00 (хотя в моем понимании должны быть еще значения AMTC02 и COIL3), а второй цикл for далее не работает. Помогите новичку, пожалуйста, разобраться в чем моя ошибка и как ее исправить. Буду очень благодарен.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.05.2017, 05:56
Ответы с готовыми решениями:

Цикл for в цикле while
Всем доброго времени суток. Начал изучать Python, для практики придумываю себе разные задания, но столкнулся с проблемой при...

Цикл в цикле Python
делаю так : f = open(format (sys.argv )) ff = open(format (sys.argv )) for line in f: for line2 in ff: print line+' '+line2...

Не выполняется цикл в цикле
Здравствуйте. Запускаю цикл перебора строк ответа от бд и в этом же цикле пытаюсь перебрать эти же строки. но второй цикл не запускается....

3
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
01.05.2017, 07:29
Цитата Сообщение от DmiFilin Посмотреть сообщение
Python
7
dataFromFile2 = csv.reader(csvFile2, delimiter=";") #прочитал файл калибровки
Значения в файле разделены пробелами, в тоже время разделителем у вас значится точка с запятой.
Если добавить точки с запятой во второй файл, то предлагаю вот такой код (с множествами)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
with open(fileName, 'r') as csvFile:
    with open(fileName2, 'r') as csvFile2:
        dataFromFile = csv.reader(csvFile, delimiter=';')
        dataFromFile2 = csv.reader(csvFile2, delimiter=';')
        #
        ports1 = set()
        ports2 = set()
        #
        for row in dataFromFile:
            for cell in row:
                c = cell.strip()
                if len(c) > 1:
                    ports1.add(c)
        #
        for row in dataFromFile2:
            for cell in row:
                c = cell.strip()
                if len(c) > 1:
                    ports2.add(c)
        #
        print(set.intersection(ports1, ports2))
#
1
0 / 0 / 0
Регистрация: 19.04.2017
Сообщений: 2
01.05.2017, 16:24  [ТС]
tezaurismosis, Спасибо за Ваш ответ. Извиняюсь, но я неправильно указал условия задачи. Да, второй файл содержит разделитель точка с запятой. Я указал нули в обоих файлах, потому что их содержимое было не так важно, как позиция с названием датчика. На самом деле вместо нулей в первом файле содержится "название файла"; "дата измерения"; "долгота", "широта" "датчик 1", "датчик 2', "датчик 3". т.е. выглядит так:

Python
1
2
3
4
1643420A.TBL;01.01.2010;68.5203833333333;79.0591666666667;COIL5;COIL6;COIL7;
1334313B.TBL;12.03.2007;43.8093533333333;79.3377333333333;AMTC123;AMTC91;AMTC20;
1475514A.TBL;13.05.2013;54.8964833333333;35.0052166666667;AMTC7;AMTC00;COIL3;
1475514M.TBL;13.05.2013;54.8964833333333;35.0052166666667;AMTC02;AMTCD;FOL;
Содержимое второго csv файла:
"название файла2";"дата калибровки";"название датчика:

Python
1
2
3
4
name0   15.05.2013    AMTC00
filedat   21.01.1999    AMTC01
datfile   13.05.2013    AMTC02
calibro   15.05.2013    COIL3
полное условие задачи: для каждого датчика из файла 2( файла калибровки) записать координаты из файла1 (файл измерений), если дата измерений совпадает на +- 2 дня от даты калибровки.

В файле с калибровкой (файл2) около 36 000 строк, в файле с измерениями 190 000.

Как правильно использовать циклы, чтобы после совпадения по одному параметру, можно было работать с другими.

Спасибо за ваше сообщение. Извиняюсь за неправильное и неполное постановление задачи.

Возможно ли все сделать с помощью списков или придется придумывать новую структуру программы? В этой теме я хотел узнать как сделать так, чтобы для определенного значения в строке из одного файла проверить, находится ли это значение во втором файле и выписать его для дальнейшей работы (связанной с этим значением). А уже далее если названия значений совпадают, то проверить даты для этих значений и если их разность <= 2, то выписать в новый файл содержимое файла калибровки + дополнить его значениями координат датчиков (эта информация для понимания).
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.05.2017, 16:37
Цитата Сообщение от DmiFilin Посмотреть сообщение
Как правильно использовать циклы, чтобы после совпадения по одному параметру, можно было работать с другими.
ИМХО, но лучше загнать оба файла в БД в виде двух таблиц. Далее - стандартные операции SQL для нахождения пересечений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.05.2017, 16:37
Помогаю со студенческими работами здесь

Почему не работает цикл в цикле
Всем привет. Помогите пожалуйста разобраться. Задача в том чтоб развернуть отображения &quot;списка списков&quot; на 90 градусов при...

Как сделать цикл в цикле?
Только начал изучать язык, так что пожалуйста без подколов. Как реализовать такой цикл в python? for (int i=0; i&lt;SIZE - 1; i++) ...

Как в цикле while закончить цикл
def loop(): print(&quot;Хотите ли вы посмотреть другие концовки?&quot;) time.sleep(2) mes = input('Введите &quot;1&quot; для того, чтобы...

Условие в цикле или цикл в цикле
При вводе данных в textbox2(Стоимость) и textbox1(Срок) и нажатии на кнопку формируется таблица DataGridView2. Сначала сумма вычисляется...

Цикл: как работает цикл в цикле
Не могу понять как работает цикл в цикле например: repeat begin lalalala if что-то1&lt;&gt;100 then begin lalalala2 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru