簡體   English   中英

在Python中解析多個CSV(.txt)文件

[英]Parsing Multiple CSV (.txt) Files in Python

我正在嘗試建立一個系統,用戶可以在其中登錄Web界面並跟蹤已下的訂單。 系統將從最初的確認到生產一直跟蹤訂單,最后在發貨前停止。 (正如我妻子解釋的那樣:“就像Domino的Pizza訂單跟蹤器一樣,但用於名片。”)我被困在需要從不斷變化的以逗號分隔的.txt文件目錄中解析數據的位置。 放置的每個訂單都會自動生成自己的.txt文件,其中包含我將在Web界面上顯示的各種重要信息。 例如:

H39TZ3.txt:

token,tag,prodcode,qty          #(These are the headers)
,H39TZ3,pchd_4stpff,,100        #(These are the corresponding values for part 1 of the order)
,H39TZ3,pchdn_8ststts,6420-PCNM8ST,100   #(These are values for part 2 of the order)

在任何給定時間,目錄中最多會有300個不同的.txt文件,這些文件將根據其訂單狀態來回移動(一旦發貨,這些文件就會被存檔)我已經閱讀了代碼以解析單個文件並將值導入字典中,但是我發現的所有內容都是針對單個文件的。 我將如何只為多個文件編寫這樣的內容?

import csv

d = {}

for row in csv.reader(open('H39TZ3.txt')):
    d['Order %s' % row[1]] = {'tag': row[1], 'prodcode': row[2], 'qty': row[3]}

謝謝!

您可以使用os.listdir()列出包含.txt文件的目錄的內容。 如下所示的內容應該適合您:

for filename in os.listdir("."):
    with open(filename) as csv_file:
        for row in csv.reader(csv_file):
            d['Order %s' % row[1]] = {'tag': row[1], 'prodcode': row[2], 'qty': row[3]}

請注意,我在其中添加了with語句。 在完成處理后,它將確保關閉文件,以免浪費/用盡文件描述符。 如果該目錄中可能還包含您感興趣的文件之外的其他文件,則可以在with語句之前添加適當的過濾。

我想補充一點,如果您想將行作為字典讀取,則csv.DictReader可能是一個更好的選擇。 它將根據第一行(標題)自動設置字典的鍵。 您可以這樣使用它:

with open(filename) as csv_file:
    for row in csv.DictReader(csv_file):
        d['Order ' + row['tag']] = row

但是,如dm03514所述,數據庫可能是一個更好的選擇。 sqlite隨附Python( sqlite3模塊),您可以使用多種工具來檢查和修改數據庫。 它也應該比使用單個文件更強大。

暫無
暫無

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

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