Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48
1

Фильтрация значений в Excel файле

29.02.2016, 23:36. Показов 3622. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть экселевский файл, в нем 10 листов, 1 лист = 1 день, в каждом листе по примерно 1000 значений, все они в 1 столбец, по значению в каждой строке. Значения - телефонные номера. На одном листе все номера уникальны. Допустим человек звонил в 1й день, необходимо узнать звонил ли он в 2й, 3й и 4й день. Потом перебрать звонивших во 2й день и найти совпадения в 3м, 4м и 5м дне и тк до 7го дня. Так же нужно количество совпавших номеров, за 1-2, 1-3, 1-4 дни и тд. Вероятнее всего объяснил не совсем ясно, кто может помочь, задавайте вопросы.
К примеру день 1й sheet1=[111,222,333,444,555,666,777] день 2й sheet2=[888,999,111,455,765,555,790] на выходе имеем result1_2=[111, 555] amount=2
К чему пришел сам:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import xlrd
 
rb = xlrd.open_workbook('main.xls', formatting_info=True)
#выгребаем значения с 1го листа и получаем список списков
sheet1 = rb.sheet_by_index(0)
vals1 = [
    sheet1.row_values(rownum) for rownum in range(sheet1.nrows)
]
#перебираем список списков и на выходе список с int (не знаю зачем это делаю, но кажется логичным)
lis1 = []
 
fai1 = [int(line[0]) for line in vals1]
 
for x1 in fai1:
    lis1.append(x1)
#делаем то же самое с вторым листом
sheet2 = rb.sheet_by_index(1)
vals2 = [
    sheet2.row_values(rownum) for rownum in range(sheet2.nrows)
]
 
lis2 = []
 
fai2 = [int(line[0]) for line in vals1]
 
for x2 in fai2:
    lis2.append(x2)
 
#и вот теперь не знаю как их сравнивать и искать номера + количество совпадений
Буду рад любой помощи, советом/кодом,
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.02.2016, 23:36
Ответы с готовыми решениями:

Сохранение значений переменной в файле Excel, но не на листе
Где-то я просторах инета читал о возможности сохранения значения переменной в файле Excel, не...

Фильтрация текста в файле
Задача вот в чём: Имеется файл с тестовыми данными, некоторые данные повторяются в этом файле,...

Фильтрация выбросов в архивном файле
Программа осуществляет чтение трендов из архивного файла заданного формата и строит их на Chart.В...

Фильтрация строк в csv файле
Прошу помощи в реализации нужно удалить строки из csv содержащие определенные слова пробовал при...

Фильтрация Excel
Добрый день. Возник вопрос касательно установки фильтров в excel. Когда ставишь фильтры на...

7
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
01.03.2016, 00:20 2
Python
1
2
3
4
5
lsts = [[111,222,333,444,555,666,777],[888,999,111,455,765,555,790]]
 
for i1, e1 in enumerate(lsts):
    for i2, e2 in enumerate(lsts[i1+1:]):
        print("result{}_{} =".format(i1, i1+i2+1), list(set(e1) & set(e2)))
Код
result0_1 = [555, 111]
0
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48
02.03.2016, 01:45  [ТС] 3
Доделал, но немного подругому реализовал, тк не до конца понял как реализован код в посте выше.
Есть ли возможность оптимизировать данный код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import xlrd
 
import xlwt
 
rb = xlrd.open_workbook('main.xls', formatting_info=True)
wb = xlwt.Workbook()
 
def searSheet(numSheetsRead):
    sheet = rb.sheet_by_index(numSheetsRead)
    vals = [sheet.row_values(rownum) for rownum in range(sheet.nrows)]
 
    lis = []
 
    fai = [int(line[0]) for line in vals]
 
    for x in fai:
        lis.append(x)
 
    return lis
 
lis1 = searSheet(0)
lis2 = searSheet(1)
lis3 = searSheet(2)
lis4 = searSheet(3)
lis5 = searSheet(4)
lis6 = searSheet(5)
lis7 = searSheet(6)
lis8 = searSheet(7)
lis9 = searSheet(8)
lis10 = searSheet(9)
 
def cicle(nsheets, listCheck1, listCheck2):
    rlist = []
    rlist.extend(listCheck1)
    rlist.extend(listCheck2)
 
    i = 0
    counter = []
    while i < len(rlist):
        if rlist.count(rlist[i]) == 2:
            counter.append(rlist[i])
        i = i + 1
 
    res = []
    for item in counter:
        if item not in res:
            res.append(item)
 
    ws = wb.add_sheet(nsheets)
 
    d = 0
    while d < len(res):
        ws.write(d, 0, res[d])
        d = d + 1
 
    ws.write(0, 1, len(res))
    wb.save('./example.xls')
 
cicle('1_2', lis1, lis2)
cicle('1_3', lis1, lis3)
cicle('1_4', lis1, lis4)
 
cicle('2_3', lis2, lis3)
cicle('2_4', lis2, lis4)
cicle('2_5', lis2, lis5)
 
cicle('3_4', lis3, lis4)
cicle('3_5', lis3, lis5)
cicle('3_6', lis3, lis6)
 
cicle('4_5', lis4, lis5)
cicle('4_6', lis4, lis6)
cicle('4_7', lis4, lis7)
 
cicle('5_6', lis5, lis6)
cicle('5_7', lis5, lis7)
cicle('5_8', lis5, lis8)
 
cicle('6_7', lis6, lis7)
cicle('6_8', lis6, lis8)
cicle('6_9', lis6, lis9)
 
cicle('7_8', lis7, lis8)
cicle('7_9', lis7, lis9)
cicle('7_10', lis7, lis10)
0
170 / 91 / 71
Регистрация: 10.05.2014
Сообщений: 432
02.03.2016, 14:02 4
dvaperca,

А разве так не будет проще, чем писать так много кода?
Python
1
2
lis1,lis2,lis3,lis4,lis5,lis6,lis7,lis8,lis9,lis10 = searSheet(i for i in range(10))
cicle('%d_%d',lis%s % ((*(([i][j]) for i in range(11) for j in range(11)),(i for i in range(11)))))
P.S. во втором мог допустить ошибку, проверить сейчас негде
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
02.03.2016, 14:15 5
Цитата Сообщение от Zodt Посмотреть сообщение
lis%s
0
170 / 91 / 71
Регистрация: 10.05.2014
Сообщений: 432
02.03.2016, 18:52 6
Jabbson, согласен, делал наспех, а как говорится "поспешишь - людей насмешишь"=)
Попробовал так, вроде работает, но тк нет исходного документа, сложно быть уверенным на 100%
Python
1
2
lis1,lis2,lis3,lis4,lis5,lis6,lis7,lis8,lis9,lis10 = searSheet(i for i in range(10))
cicle('%d_%d',list('lis%s'),list('lis%s') % ((','.join([i][j] for i in range(1,7) for j in range(2,10)),','.join([i][j] for i in range(1,7) for j in range(2,10)))))
0
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
02.03.2016, 18:59 7
Нет, так не бывает.
Цитата Сообщение от Zodt Посмотреть сообщение
list('lis%s') % (
0
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48
04.03.2016, 13:25  [ТС] 8
сыпит ошибки, если нужно скину их, но позже.
еще такой вопрос, как сделать, чтобы название файлов можно было вводить вручную
вот так работает
Python
1
2
a = 'main.xls'
rb = xlrd.open_workbook(a, formatting_info=True)
но вот так уже не работает:
Python
1
2
a = input('Vvedite nazvanie faile')
rb = xlrd.open_workbook(a, formatting_info=True)
0
04.03.2016, 13:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2016, 13:25
Помогаю со студенческими работами здесь

Фильтрация значений
Может будут у вас какие нибудь идеи, как реализовать в Лазарусе данный цифровой фильтр и сделать...

Фильтрация значений
Здраствуйте, ищу и спрашиваю уже 3 дня,никак найти не могу,у меня вопрос,помогите пожалуйста!!! У...

Поиск значений в файле и замена соответствующих в другом файле
Сильно не пинайте, я новичок. Существует 2 файла. В первом (1.txt) текст: 123=qwerty...

Фильтрация диапазона в Excel
Добрый день! VBS. Есть таблица Excel, 3 колонки(A, B, C), заголовок, и очень много строк . В...

Фильтрация и сортировка в Excel
Добрый день!!! на практике подкинули задачку, никак не могу осилить: дана таблица уже с готовыми...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru