根据文件内容中的代码编写单独的文件 - python

时间:2016-04-11 15:34:18

标签: python group-by

我有一个巨大的文件,有四个不同的列。其中一列的代码包括“AB'”,“' AB' CA'等等。我想为每个代码创建单独的文件。示例file_AB包含所有四个字段,但代码字段仅为' AB'。 我是新手,但如果可能的话,我想使用python。 with open("C:/Users/Desktop/JesseData/fileread.txt") as f1: with open("C:/Users/Desktop/JesseData/fileout.txt") as f2: for line in f1: if fourth_attribute == 'CA': f2.write(line)

1 个答案:

答案 0 :(得分:0)

我不打算给你一个完整的代码来做这件事,但这是一个开始:

第1步:阅读文件

如果你的文件太大,你会想要以块的形式阅读它。为此,您可以跟踪每个块中已读取的行数,然后当该迭代器达到限制时,将数据转储到单独的文件中。类似的东西:

with open("raw_data.txt", 'r') as f:
    i = 0
    data = []
    for line if f:
        data.append(line)  #do some formatting here
        i += 1
        if i >= THRESHOLD:
             data_dump(data)
             data = []
             i = 0

这样,您就可以防止将整个文件同时存储在内存中。

第2步:对数据进行分组

data_dump功能中,您需要对数据进行分组。使用itertools.groupby()可以轻松完成此操作。此函数采用可迭代和密钥,然后返回分为组的迭代器。如果您的数据格式化,其中每一行是该行中的值列表,并且您的键是第一个条目,则您的分组可能如下所示:

groups = itertools.groupby(data, key = lambda x: x[0])

请注意,groupby()需要排序的数据集,因此您需要使用相同的键功能对数据进行排序。以下是groupby

的简单示例
>>> lst = [[1, 2,3],[1,4,5],[2,45,65]]
>>> import itertools
>>> groups = itertools.groupby(lst, key = lambda x: x[0])
>>> 
>>> for g in groups:
...     print g[0], list(g[1])
...
1 [[1, 2, 3], [1, 4, 5]]
2 [[2, 45, 65]]

第3步:写入数据

将数据分组后,您可以循环浏览组,并将数据附加到相应的输出文件。我建议保留一个文件句柄字典:

d = {"AB": open("AB.txt", 'a'), "BC", ....}

这样,当您遍历所有循环时,您可以轻松地写入正确的文件