我正在尝试建立一个系统,用户可以登录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]}
谢谢!
答案 0 :(得分:4)
您可以使用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
语句之前添加适当的过滤。
答案 1 :(得分:3)
我想补充一点,如果你想把行读成字典,csv.DictReader
可能是更好的选择。它将根据第一行(标题)自动设置字典的键。你会这样使用它:
with open(filename) as csv_file:
for row in csv.DictReader(csv_file):
d['Order ' + row['tag']] = row
正如dm03514所提到的,数据库可能是更好的选择。 sqlite附带Python(sqlite3
模块),您可以使用各种工具来检查和修改数据库。它也应该比使用单个文件更强大。