天兒真好,特別行重寫CSV文件中省略 - 的Python 3
我張貼this問題,不得不從@abarnert一些優秀的響應。我試圖從CSV文件中刪除特定的行。我已經瞭解到,CSV文件不允許刪除特定行,因此我將重寫CSV,同時省略特定行,然後將新文件重命名爲舊文件。
根據鏈接中的上述問題,我從工具箱中獲取並返回工具。我試圖重寫的CSV文件是當前從工具箱簽出的工具的一個持續「日誌」。因此,當返回工具時,我需要將該工具從日誌CSV文件中刪除。
這是我到目前爲止有:
absent_past = frozenset(tuple(row) for row in csv.reader(open('Absent_Past.csv', 'r')))
absent_current = frozenset(tuple(row) for row in csv.reader(open('Absent_Current.csv', 'r')))
tools_returned = [",".join(row) for row in absent_past - absent_current]
with open('Log.csv') as f:
check = csv.reader(f)
for row in check:
if row[1] not in tools_returned:
csv.writer(open('Log_Current.csv', 'a+')).writerow(row)
os.remove('Log.csv')
os.rename('Log_Current.csv', 'Log.csv')
正如你(希望)從上面看,它會打開Log.csv文件,如果一個工具已經返回(即工具。在tools_returned中連續列出),它不會將該條目重新寫入新文件。當所有未返回的工具已寫入新文件時,舊文件將被刪除,新文件將從Log_Current.csv重命名爲Log.csv。
值得一提的是,在重命名之前,已採取的工具將附加到Log_Current.csv。這部分代碼很好地工作:)
我已經被指示避免使用這個系統的CSV,我同意。不過,我想盡可能在Python下探索CSV操作,因爲我知道它將在未來派上用場。我將在未來使用contextlib和擱置功能。
謝謝!
編輯:在上面的代碼中,我有如果行[1] ...我希望它意味着它只會檢查行中的第一列的值?基本上,該行將包含Hammer,James,Taken,09:15:25之類的內容,但我只想搜索Hammer的Log.csv文件,因爲tools_returned僅包含工具名稱行,即。錘子,鑽子,鋸子等。[1]行是否正確?
目前,Log_Current.csv文件正在寫入Log.csv文件,無論該工具是否已被替換。因此,我認爲if行[1]等代碼部分不起作用。
StackOverflow應該允許你接受你自己的答案。所以你應該這樣做。 (除非你認爲在這裏根本不值得這樣做,在這種情況下你應該刪除這個問題。) – abarnert
試圖刪除它,但我不能,因爲有答案。那麼我可能會接受我的答案。希望它能幫助別人。 – jars121