2015-07-01 3 views
2

я в основном один файл первенствовать с имеет следующие записи в конкретном листеКопирование первенствует строк с помощью питона

row[0][0]=hello 

row[1][0]=bye 

row[2][0]=hi 

Я хочу, чтобы скопировать эти три строки в число строк, присутствующих в исходном листе, так что измененный лист имеет следующее.

row[0][0]=hello 

row[1][0]=bye 

row[2][0]=hi 

row[3][0]=hello 

row[4][0]=bye 

row[5][0]=hi 

row[6][0]=hello 

row[7][0]=bye 

row[8][0]=hi 

Мой код ниже.

from xlutils.copy import copy 
from xlrd import open_workbook 
import xlwt 

book=open_workbook("/Users/tusharbakaya/Desktop/test.xlsx") 
book1=copy(book) 
sheet=book.sheet_by_name('Sheet1') 
sheet1=book1.get_sheet(0) 
totalrows=sheet.nrows 
print totalrows 
for j in range(0,totalrows): 
    for i in range(0,totalrows): 
     row=sheet.cell_value(i,0) 
     sheet1.write(j+totalrows,0,row) 
     i+=1 
    j+=totalrows 
book1.save("/Users/tusharbakaya/Desktop/test1.xls") 

Однако я получаю следующие выходные данные

row[0][0]=hello 

row[1][0]=bye 

row[2][0]=hi 

row[3][0]=hello 

row[4][0]=hello 

row[5][0]=hello 

row[6][0]=hello 

Не знаю, почему это происходит.

ответ

0

Проблема в том, что даже если вы измените переменную цикла j внутри цикла, это изменение будет перезаписано следующим значением от range().

Пример показать это -

>>> for i in range(10): 
...  print(i) 
...  i = 1000 
... 
0 
1 
2 
3 
4 
5 
6 
7 
8 
9 

Но ваш код в зависимости от этого произойдет, вместо этого вы должны попытаться установить на I + J * totalrows (каждый раз) и начать J из 1. И логика внутри внутреннего цикла тоже немного ошибочна, вы должны зависеть от переменной i, а также для установки значений в новой книге.

Так что код стал бы -

from xlutils.copy import copy 
from xlrd import open_workbook 
import xlwt 

book=open_workbook("/Users/tusharbakaya/Desktop/test.xlsx") 
book1=copy(book) 
sheet=book.sheet_by_name('Sheet1') 
sheet1=book1.get_sheet(0) 
totalrows=sheet.nrows 
print totalrows 
for j in range(0,totalrows): 
    for i in range(0,totalrows): 
     row=sheet.cell_value(i,0) 
     sheet1.write(i+(j*totalrows),0,row) 
book1.save("/Users/tusharbakaya/Desktop/test1.xls") 

или вы можете использовать while петлю вместо for петли и

Пример для в то время как петля -

from xlutils.copy import copy 
from xlrd import open_workbook 
import xlwt 

book=open_workbook("/Users/tusharbakaya/Desktop/test.xlsx") 
book1=copy(book) 
sheet=book.sheet_by_name('Sheet1') 
sheet1=book1.get_sheet(0) 
totalrows=sheet.nrows 
print totalrows 
j,k = 0, 0 
while k < totalrows 
    for i in range(0,totalrows): 
     row=sheet.cell_value(i,0) 
     sheet1.write(i+j,0,row) 
    j+=totalrows 
    k += 1 
book1.save("/Users/tusharbakaya/Desktop/test1.xls") 
+0

работала отлично :) Спасибо. Делает полный смысл :) –

+0

Рад, что это сработало для вас. –

+0

Пожалуйста, не забудьте принять ответы на свои вопросы (нажав на галочку слева), если они вам помогли, это поможет сообществу. –