使用Python根据数据将文件拆分为多个部分

使用Python根据数据将文件拆分为多个部分,python,file,split,eval,Python,File,Split,Eval,我正在寻找一个相当于awk脚本的Python,它可以根据记录中的一个标志将一个文件拆分为26个部分。这是因为一个文件中有26种不同的记录类型,这是Burroughs在20世纪70年代使用的分层数据库的遗留问题。我希望能够打开26个名为f_A到f_Z的文件,而不是传统的f1文件,然后在我读入这些文件时将它们流出来,而不用将整个文件保存在缓冲区中 # Gawk original - split new valuation roll format into record types A-Z # run

我正在寻找一个相当于awk脚本的Python,它可以根据记录中的一个标志将一个文件拆分为26个部分。这是因为一个文件中有26种不同的记录类型,这是Burroughs在20世纪70年代使用的分层数据库的遗留问题。我希望能够打开26个名为f_A到f_Z的文件,而不是传统的f1文件,然后在我读入这些文件时将它们流出来,而不用将整个文件保存在缓冲区中

# Gawk original - split new valuation roll format into record types A-Z
# run gawk -F\| -f split.awk input_file
# creates A.raw, B.raw, .... Z.raw
# Oct 1995 
{ident = $8; 
file = ident".raw";
print $0 >> file}
所以我想我可以构造一个文件句柄,然后用eval()或其他方法调用它,将每条记录指向正确的输出

for line in fileinput.input(src):
    parts = line.split('|')
    recType = parts[7]
    recFile = 'f_'+recType
    if not recType in openFiles:
        eval(recFile) = open(recType+".raw",'w') # how should this line be written?
    eval(recFile).write(line)
    # ....
我可以从f1.name中获取系统文件的名称 并计算一个变量以获得句柄,例如eval(“f_a”)
但我看不出如何使用非硬编码的句柄打开文件。

eval
是需要避免的,幸运的是,几乎不需要它。在本例中,
open(recType+“.raw”,'w')
创建一个文件句柄。您只需要将其与recType关联。这就是字典的用途

在下面的代码中,
openFiles
是一个字典。每次我们遇到一个新的
recType
,我们都会为它打开一个文件,并将其文件句柄保存在
openFiles
键下的
recType
。每当我们想再次写入该文件时,我们只需向字典请求文件句柄。因此:

openFiles = {}
for line in fileinput.input(src):
    parts = line.split('|')
    recType = parts[7]
    if not recType in openFiles:
        openFiles[recType] = open('f_' + recType, 'w')
    openFiles[recType].write(line)
    # .... 

请包括一些更具教育意义的解释。@LaszloPapp OK。我希望现在它更有教育意义。