簡體   English   中英

用python寫入Excel文件

[英]Writing to excel file with python

我正在嘗試將數據寫入Excel文件。 滿足if-test要求的每個鏈接都應在excel文件中寫出。 它開始在(0,0)處寫入,並在同一列(0,1),(0,2)..(0,3)等處繼續向下。問題在於它會將數據寫出到excel文件中,但僅當if-test達到其最后一次時。

Json文件:

[
  {
   "beds": "3",
   "bath": "2",
   "link": "https://www.realestate.com/5619-w-michelle-dr-glendale-az-85308--790",
   "price": "382,76"
  },
 {
   "beds": "3",
   "bath": "1",
   "link": "https://www.realestate.com/5619-w-michelle-dr-glendale-az-85308--790",
   "price": "382,76"
  },
 {
   "beds": "2",
   "bath": "3",
   "link": "https://www.realestate.com/5619-w-michelle-dr-glendale-az-85308--790",
   "price": "382,76"
  },
 {
   "beds": "3",
   "bath": "2",
   "link": "https://www.realestate.com/5619-w-michelle-dr-glendale-az-85308--790",
   "price": "382,76"
  }

]

Python代碼:嘗試過

import json
import re
from xlwt import Workbook


class Products:
        def __init__(self):
                self.list_links=[]

    def product(self,index):
            for k, v in index.items(): 
                    if k=='link':
                            link=v

                    if k=='bath':
                            bath=v
                            fl_bath=int(bath)

            wb=Workbook()
            sheet1=wb.add_sheet('sheet1')
            sheet1.col(0).width = 7000


            if fl_bath >= 2:
                 length=len(self.list_links)
                 sheet1.write(length,0,link)
                 self.list_links.append(link)
                 print(link)
                 wb.save("python.xls") 



with open('./try.json') as json_file:  
        data = json.load(json_file)

i=0  
p=Products() 

while i <= 3:
        dicts = data[i]
        p.product(dicts)
        i+=1

它應該在excel文件的每一行中向下寫出鏈接,每個鏈接都符合要求:

我得到以下輸出(excel文件):

  • 第1行:
  • 第2行:
  • 第3列: https ://www.realestate.com/5619-w-michelle-dr-glendale-az-85308--790

鏈接中的3個符合條件。 但是,只有迭代中的最后一個被寫到excel文件中。 它們是否在每次迭代后都以某種方式被覆蓋? 關於如何解決此問題的任何好的技巧?

您可以簡化代碼,因為要求是一個簡單的大於比較:

import json
from xlwt import Workbook

with open('inputFile.json') as json_file:
    data = json.load(json_file)

wb = Workbook()
firstSheet = wb.add_sheet('sheet1')
firstSheet.col(0).width = 7000
row = -1

for item in data:
    if int(item['bath']) >= 2:
        row = row + 1
        firstSheet.write(row,0,item['link'])

wb.save("outputFile.xls")

好像您每次都覆蓋Excel文件? 將您的工作簿定義代碼移至Product類的初始化,然后將函數保存為單獨的類方法,並在處理完字典后調用它。

這里的問題是,對於每次迭代,您都將創建一個新的工作簿和一張工作表,並編寫一個鏈接並將其每次保存為“ python.xls”。 您應該在函數外部創建工作簿,僅創建一次,然后在函數產品中編寫指向該工作簿的鏈接。 像這樣:

import json
from xlwt import Workbook

wb = Workbook()
sheet1 = wb.add_sheet('sheet1')
sheet1.col(0).width = 7000

class Products:
    def __init__(self):
        self.list_links=[]

    def product(self,index):
        for k, v in index.items(): 
            if k=='link':
                link = v
            if k=='bath':
                bath = v
                fl_bath=int(bath)

        if fl_bath >= 2:
            length=len(self.list_links)
            sheet1.write(length,0,link)
            self.list_links.append(link)
            print(link)

with open('./try.json') as json_file:  
    data = json.load(json_file)

while i <= 3:
    dicts = data[i]
    p.product(dicts)
    i+=1

wb.save("python.xls") 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM