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

2024-09-24 00:35:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个相当于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()或其他方法调用它来将每个记录定向到正确的输出。在

^{pr2}$

我可以从f1.name获得系统文件的名称 并计算一个变量以获取句柄,例如eval(“f_a”) 但是我不知道如何用一个非硬编码的句柄打开文件。在


Tags: 文件脚本类型raw标志eval记录句柄
1条回答
网友
1楼 · 发布于 2024-09-24 00:35:32

eval是需要避免的,幸运的是,它几乎从未被需要过。在本例中,open(recType+".raw",'w')创建一个文件句柄。你只需要把它和recType联系起来。这就是字典的用途。在

在下面的代码中,openFiles是一个字典。每次我们遇到一个新的recType,我们为它打开一个文件,并将它的filehandle保存在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)
    # .... 

相关问题 更多 >