簡體   English   中英

Python文本文件搜索和更新

[英]Python text file search and update

我正在嘗試從現有項目列表中篩選出已經搜索過的項目。 我當前的代碼如下; 無論“ last search items.txt”中的內容是什么,它似乎都不會過濾掉任何項目。

def filter_recent_items(items):
#Clarify item results - only return if it wasn't run in the last search. 
#Clears & rewrites items to .txt file after each search
    newitems = []
    with open('last search items.txt', 'r+') as f:
        lines = f.read().split('\n')
        print lines
        for item in items:
            if item['id'] in lines:
                pass
            else:
                newitems.append(item)                          
        f.seek(0)
        f.truncate()
        for item in items:
            f.write("%s \n" % item['id'])            
    return newitems 

函數輸入項是字典列表(每個項都有一組鍵):

items = [{'count': 1, 'postage': '0.0', 'listing type': 'StoreInventory', 'title': 'APPLE IPAD AIR 2 WITH RETINA DISPLAY 128GB SPACE GREY UNLOCKED 4G/WIFI', 'price': '828.89', 'start time': '2015-12-19T12:01:19.000Z', 'end time': '2016-01-18T12:06:19.000Z', 'item url': 'http://www.ebay.com.au/itm/APPLE-IPAD-AIR-2-RETINA-DISPLAY-128GB-SPACE-GREY-UNLOCKED-4G-WIFI-/151921257466', 'category': 'iPads, Tablets & eReaders', 'id': '151921257466', 'condition': '3000'},

{'count': 2, 'postage': '13.4', 'listing type': 'FixedPrice', 'title': 'Samsung SM-P350NZAAXSA Galaxy Tab A 8.0 w/S Pen WiFi 16GB NEW', 'price': '340.0', 'start time': '2015-12-19T11:56:51.000Z', 'end time': '2015-12-29T11:56:51.000Z', 'item url': 'http://www.ebay.com.au/itm/Samsung-SM-P350NZAAXSA-Galaxy-Tab-8-0-w-S-Pen-WiFi-16GB-NEW-/252218618062', 'category': 'iPads, Tablets & eReaders', 'id': '252218618062', 'condition': '1000'}]

運行此功能后,最后搜索的items.txt將包含itemid列表,例如:

151921257466 
252218618062 
201487509183 
291642436891 
272081891024 

該函數應打開“ last search items.txt”,其中應包含項目ID列表(來自先前的搜索)。 對於函數輸入中的每個項目,它將查看文本文件中是否已經存在“ itemid”。 如果不是,則將項目字典追加到函數輸出中。 完成此操作后,它將清除文本文件,並從“項目”中重寫項目ID,為下次調用此函數做好准備。

我的問題是,即使它實際上在文本文件中,也無法在文本文件中找到“ itemid”(不會拋出任何錯誤消息,只需將“ items”的全部內容附加到輸出中)。 在Windows上進行編輯和測試時,它工作正常。 從那以后,我將其上傳到無法正常工作的unix VPS,對其進行了稍微的編輯,現在看來無論在Windows還是unix上都無法使用!

第二個問題是,有沒有一種更優雅的方式可以過濾(字典)項目列表以僅返回上次運行腳本時不在列表中的結果?

問題出在您將當前搜索的ID寫入文件的行中。 通過在占位符和換行符之間放置一個空格,該空格將被寫入文本文件(即,文本文件的第一行為“ 151921257466”),這意味着當讀取文本文件的內容時,該空間出現在您要與當前搜索的ID相比較的項目中,這意味着它與當前搜索的ID不匹配,無論它是否應該匹配(因為您要與之比較的內容都有里面有多余的空間,將使其不匹配)。 f.write("%s \\n" % item['id'])更改為f.write(item['id'] + "\\n")應該可以在Windows上使用-我沒有可以使用Unix OS對其進行測試,因此,如果這不能使其在Unix上工作,那么我將無法提供幫助。

暫無
暫無

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

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