我有一个巨大的文件,有四个不同的列。其中一列的代码包括“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)
答案 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", ....}
这样,当您遍历所有循环时,您可以轻松地写入正确的文件