Форум сайта python.su
Здравствуйте!
Задача: из определенного столбца из каждой ячейки этого столбца считать несколько символов начиная с определенного 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)
Офлайн
а екселем он октрывается вобще?
Офлайн
ZerGКонечно открывается. Вот только что перепроверил. Всё нормально открывается.
а екселем он октрывается вобще?
Офлайн
есть возможность сам файлик прикрепить?
Офлайн
ZerGЗнаете, Я пересохранил файл и теперь код ошибок не выдает:
есть возможность сам файлик прикрепить?
import xlrd wb = xlrd.open_workbook("C:/Users/test/Downloads/temp.xls")
Отредактировано Newtranshuman (Окт. 7, 2016 16:34:22)
Офлайн
Еще вчера понял как это делать и уже написал свой небольшой говнокодик для небольшой практической задачи:
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')
Офлайн