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

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

01.05.2017, 05:56. Показов 3883. Ответов 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
9673 / 4825 / 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru