Pandas和CSV库CSV操作

时间:2018-01-06 09:25:07

标签: python pandas csv

我正在构建一个简单的应用程序。

我希望我的CSV中的某些值每15分钟更新一次。我想要 我的应用程序的这部分在后台运行,以防止阻止界面。

我无法以我想要的方式工作。

我的代码:

# I'm using the pandas, sched and time imports here:

#INTERFACE
@app.route("/")
def home():
    s = sched.scheduler(time.time, time.sleep)
    s.enter(15, 1, timer)
    s.run()
    return render_template("index.html")

#TIMER
def timer():
  timer = 0
  csv_file='C:\Python27\Walmart\sheet.csv'
  print("UPDATING")
  data_df = pd.read_csv(csv_file)
  print("READ")
  for i, row in data_df.iterrows() :
      sku = data_df.iloc[i]['Walmart SKU']
      print (sku)
      if sku is '':
        break
      else:
        update(sku)
        print("Item Updated")
  print("UPDATECOMPLETE")
  home()

#UPDATE
def update(sku):

     lookup=str(sku)
     lookup = lookup.replace('.0', '')
     product = wapy.product_lookup(lookup)
     ts = time.time()

     st = datetime.datetime.today().strftime('%Y-%m-%d %I:%M %p')
     print (product.name)

     if product.available_online is 'TRUE':
        instock = 'yes'
     else:
        instock ='no'

     quote_page = product.product_url
     page = urlopen(quote_page)
     soup = BeautifulSoup(page, 'html.parser')
     sold_box = soup.find('a', attrs={'class': 'font-bold prod-SoldShipByMsg'})
     sold = sold_box.text.strip()
     left_box = soup.find('div', attrs={'class': 'prod-ProductOffer-urgencyMsg'})
     left = left_box.text.strip()

     if left is '':
       stock=product.stock
     else:
       stock=left

     # fields=[lookup + ',' + '$'+str(product.sale_price) + ',' + instock + ',' + stock + ',' + str(sold) + ',' + st + ',' + '$'+str(product.msrp)]
     pathto_csv = 'C:\Python27\Walmart\sheet.csv'
     data_df = pd.read_csv(pathto_csv)
     print("CSV READ")

     data_df.set_value([lookup], ['Price'], '$'+str(product.sale_price))
     data_df.set_value([lookup], ['In Stock'], instock )
     data_df.set_value([lookup], ['Quantity'], stock)
     data_df.set_value([lookup], ['Last Update'], str(sold))
     data_df.set_value([lookup], ['Min Price'], '$'+str(product.msrp))

     data_df.to_csv(pathto_csv)

     with open(r'sheet.csv', 'a') as f:
         writer = csv.writer(f, delimiter=' ', quotechar = ' ')
         writer.writerow(fields)
     print(st)
     print("UPDATED! 15 Minutes Have Passed!")

我有两个问题:

1。在更新我的更新中的值时,我收到此错误:

KeyError: "['879091509'] not in index"

我认为[row],[column]会让我替换该单元格所需的值,例如:

data_df.set_value([lookup], ['Price'], '$'+str(product.sale_price))

我读到这个:

  • 我的SKU或ID由['lookup']
  • 表示的行
  • ['Price']替换为'$'+str(product.sale_price)

2。我无法访问我的界面。

  • 我认为这是因为:
    • 当时间重置时,它会再次运行代码。

问题:如何才能在后台运行?

1 个答案:

答案 0 :(得分:0)

<强> Q1

有两个问题:

  1. 第一个参数set_value搜索DataFrame的索引,但您的DataFrame没有索引。
  2. 您将列表传递给set_value,但它只需要值。
  3. 要修复,首先设置一个索引:

    data_df = data_df.set_index('Walmart SKU')
    

    set_value中删除列表:

    data_df.set_value(lookup, 'Price', '$'+str(product.sale_price))
    

    <强> Q2

    不够明确回答。尝试用最少的测试用例提出新问题。