在把数据写入Excel的过程中遇到了问题,写入的数据是for循环进去的,所以是分多次写入(每次for循环写入一次,一次有几十条数据)。
但是在第二次for循环写数据时,就会覆盖掉第一次写的数据,就是后一次写入的数据会覆盖掉之前写的,代码片段:
1 book = xlwt.Workbook(encoding='utf-8',style_compression=0) #创建文件 2 sheet = book.add_sheet('sheet1',cell_overwrite_ok=True) #指定sheet表名称 3 h = 1 # 行号 4 for con in cons: 5 l = 0 # 列号 6 for num in range(0,13): #下标和列号是相同的,毕竟你要写几个数据就要几列 7 sheet.write(h,l,con[num]) 8 l += 1 #列要加一 9 # print('已写入 %s' % str(cons)) 10 h += 1 #一个数据写完之后,要换行了,行号加一 11 # l = 0 #但是列还得从0开始,从A列开始 12 book.save('%s.xls' % str(con[0] + '(' + con[1] + ')')) #保存文件
后来想了下,每次for循环的时候行号都是1...(好像是吧)所以就直接覆盖了。
我想的解决方法是获取当前Excel的行数,然后写入的时候就从行数+1开始写数据,这样就不会覆盖掉,但是网上查了一些资料,获取行号好像Python3不能用?nrows并不行...
或者还有其它好的解决方法,pandas...help me
兄弟,我给你个util直接用就行了,私信加我!!!
@会发光: python你想写完一条数据后保存,想直接读取当前sheet页是不能的你要重新open一下后读;他的本质是1.读数据,2.写数据3.修改数据. 其中修改数据最为特殊!!!他是把当前sheet页copy下来后再此基础上进行操作,说以你想写入一条数据后想获取当前页已有数据 ,就要重新open读取一下
我又设想了一种:
有一个函数专门用来创建Excel表格,一个函数专门读取表格的行数,一个函数专门写数据....不知道可行,明天测下,不行再辛苦发个案例学习下:)
看不懂你这个,
你可以试试csv方法。
直接将数据按行的形式写入csv文件(而不用for循环)
需要Excel格式的....
@会发光:Excel表格可以支持很多格式,你说是xlsx格式。Excel也可以支持.csv格式。
你用csv方法得到表格
用pandas吧 下面供参考
import pandas as pd def get_and_write_file(search_word, start_time, end_time,pages): startTime_ = datetime.datetime.strptime(start_time, '%Y-%m-%d') endTime_ = datetime.datetime.strptime(end_time, '%Y-%m-%d') while startTime_ <= endTime_: startTime = startTime_.strftime('%Y-%m-%d') endTime = startTime startTime_ += datetime.timedelta(days=1) print('++++++++++++++' + startTime + '+++++++++++++') for page in range(1,pages+1): print('---------第' + str(page) + '页--------') try: get_write_one_page(search_word, startTime, endTime, page) except Exception as e: if e == 'data': break try: qingbo = Qingbo() qingbo.login_in() time.sleep(3) get_write_one_page(search_word, startTime, endTime, page) except Exception as e: print(e) break time.sleep(3) #to_excel(out_file) def to_excel(file_path): big_df = pd.read_csv(file_path, sep='$', header=None, engine='python', encoding='utf8') big_df.columns = ['公众号', '文章名', '阅读量', '点赞数', '日期'] big_df.to_excel(file_path.rsplit('.', 1)[0] + '.xlsx', index=False, encoding='utf8')
还是会覆盖掉,到最后保存的文件,只剩一条记录了。