用Python解析多个CSV(.txt)文件

时间:2012-10-24 18:59:27

标签: python csv

我正在尝试建立一个系统,用户可以登录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]}

谢谢!

2 个答案:

答案 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模块),您可以使用各种工具来检查和修改数据库。它也应该比使用单个文件更强大。