Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2016 15:18:06

Newtranshuman
Зарегистрирован: 2016-10-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение из excell символов из ячейки.

Здравствуйте!
Задача: из определенного столбца из каждой ячейки этого столбца считать несколько символов начиная с определенного n-ного символа и куда-то сохранить эти строки с каждой ячейки, например - в список.
Ввод: номер столбца, номер символа с которого начинать чтение и количество символов которые нужно прочесть в каждом столбце.
Если практически, под конкретную задачу, то мне нужно из 111.xls-файла из столбца H прочесть каждый 12-ый и 13-ый символ и сохранять эти строки по 2 символа для дальнейшей работы с ними.
Пытался ковырять xlrd, но что-то не сложилось в самом начале.

 import xlrd
wb = xlrd.open_workbook("C:/Users/test/Downloads/111.xls")
Вывод:
 _locate_stream(Workbook): seen
    0  5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
   20  4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
  100= 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
  120  4 4 4 4 4 4 4 4 3 2 2 
---------------------------------------------------------------------------
CompDocError                              Traceback (most recent call last)
<ipython-input-3-0ccdb28a1979> in <module>()
----> 1 wb = xlrd.open_workbook("C:/Users/test/Downloads/111.xls")
C:\Users\test\Miniconda3\lib\site-packages\xlrd\__init__.py in open_workbook(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
    439         formatting_info=formatting_info,
    440         on_demand=on_demand,
--> 441         ragged_rows=ragged_rows,
    442         )
    443     return bk
C:\Users\test\Miniconda3\lib\site-packages\xlrd\book.py in open_workbook_xls(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
     85             formatting_info=formatting_info,
     86             on_demand=on_demand,
---> 87             ragged_rows=ragged_rows,
     88             )
     89         t1 = time.clock()
C:\Users\test\Miniconda3\lib\site-packages\xlrd\book.py in biff2_8_load(self, filename, file_contents, logfile, verbosity, use_mmap, encoding_override, formatting_info, on_demand, ragged_rows)
    590                 for qname in ['Workbook', 'Book']:
    591                     self.mem, self.base, self.stream_len = \
--> 592                                 cd.locate_named_stream(UNICODE_LITERAL(qname))
    593                     if self.mem: break
    594                 else:
C:\Users\test\Miniconda3\lib\site-packages\xlrd\compdoc.py in locate_named_stream(self, qname)
    388             result = self._locate_stream(
    389                 self.mem, 512, self.SAT, self.sec_size, d.first_SID,
--> 390                 d.tot_size, qname, d.DID+6)
    391             if self.DEBUG:
    392                 print("\nseen", file=self.logfile)
C:\Users\test\Miniconda3\lib\site-packages\xlrd\compdoc.py in _locate_stream(self, mem, base, sat, sec_size, start_sid, expected_stream_size, qname, seen_id)
    416             if self.seen[s]:
    417                 print("_locate_stream(%s): seen" % qname, file=self.logfile); dump_list(self.seen, 20, self.logfile)
--> 418                 raise CompDocError("%s corruption: seen[%d] == %d" % (qname, s, self.seen[s]))
    419             self.seen[s] = seen_id
    420             tot_found += 1
CompDocError: Workbook corruption: seen[2] == 4

В самом начала проблема… Даже файл открыть не знаю как, не то что прочесть содержимое ячейки.

Отредактировано Newtranshuman (Окт. 7, 2016 15:53:51)

Офлайн

#2 Окт. 7, 2016 15:40:18

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Чтение из excell символов из ячейки.

а екселем он октрывается вобще?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Окт. 7, 2016 15:44:48

Newtranshuman
Зарегистрирован: 2016-10-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение из excell символов из ячейки.

ZerG
а екселем он октрывается вобще?
Конечно открывается. Вот только что перепроверил. Всё нормально открывается.

Офлайн

#4 Окт. 7, 2016 15:55:26

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Чтение из excell символов из ячейки.


есть возможность сам файлик прикрепить?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#5 Окт. 7, 2016 16:30:59

Newtranshuman
Зарегистрирован: 2016-10-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение из excell символов из ячейки.

ZerG
есть возможность сам файлик прикрепить?
Знаете, Я пересохранил файл и теперь код ошибок не выдает:
 import xlrd
wb = xlrd.open_workbook("C:/Users/test/Downloads/temp.xls")

P.S.: скорее всего ошибка была в том, что система, которая формировала этот файл делала это каким-то нестандартным способом (вроде как не было данных о форматировании). А что далее? Как мне прочесть данные каждой ячейки определенного столбца и достать оттуда определенные символы по их позициям в ячейке?

Отредактировано Newtranshuman (Окт. 7, 2016 16:34:22)

Офлайн

#6 Окт. 8, 2016 12:35:55

Newtranshuman
Зарегистрирован: 2016-10-07
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Чтение из excell символов из ячейки.

Еще вчера понял как это делать и уже написал свой небольшой говнокодик для небольшой практической задачи:

 import xlrd
def my_path_func():
    some = True
    while(some == True):
        some = False
        try:
            way_to_file = input('Введите путь к excel-файлу.\nНапример: C:\\folder\\my.xls\nПуть: ')
            xlrd.open_workbook(way_to_file)
        except:
            some = True
            print('Ошибка: Неверный путь. Попробуйте иной путь...')
    return way_to_file
wb = xlrd.open_workbook(my_path_func())
sheet = wb.sheet_by_index(0)
k = 1
a = []
for i in range(sheet.nrows - 1):
    a.append(sheet.cell_value(rowx=k, colx=7))
    k += 1
	
k = 0
for i in range(len(a)):
    a[k] = str(a[k][11]) + str(a[k][12])
    k += 1
	
procent = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for i in a:
    procent[int(i)] += 1
proc = []
k = 0
for i in procent:
    proc.append(int(i) * 100 / sheet.nrows)
	
for i in range(len(proc)):
    print(str(i) + ' часов\nКоличество = ' + str(procent[i]) + '\nПроцент = ' + str(proc[i]) + '%\n')
	
input('Для выхода нажмите Enter')

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version