我有一个标签分隔文件(raw.txt
),格式如下:
type A1 A2 A3 A4 ....
params int char char char ...
data 1 abc cde fgh ...
type B1 B2 B3 B4 ....
feature int char char char ...
data 2 aaa bbb ccc ...
type C1 C2 C3 C4 ....
stats int int char char ...
data 2 11 aa bb ...
data 3 12 cc cc ...
data 4 13 dd dd ...
data 5 14 ee ee ...
... ... ... ... ... ...
我想解析这样的文件,然后我想创建一个名为file name的文件夹,然后在该文件夹中,我想基于types
创建不同的文件。在行中观察type
后,将使用数据创建文件,例如:
/raw/file1
A1 A2 A3 A4 ....
int char char char ...
1 abc cde fgh ...
/raw/file2
B1 B2 B3 B4 ....
int char char char ...
2 aaa bbb ccc ...
/raw/file3
C1 C2 C3 C4 ....
int int char char ...
2 11 aa bb ...
3 12 cc cc ...
4 13 dd dd ...
5 14 ee ee ...
... ... ... ... ...
依旧...... 而且我想创建像,
这样的词典dict1 = {A1:['int', [1]], A2:['char', ['abc']], ...}
dict2 = {B1:['int', [2]], B2:['char', ['aaa']], ...}
dict3 = {C1:['int', [2, 3, 4, 5], C2:['int', [11, 12, 13, 14, ...]], ...}
我怎么能这样做,因为这是一个非常大的文件,解析如此庞大的文件会挂起窗口,而且我也无法弄清楚如何从文件中获取此类输出。
答案 0 :(得分:0)
以下是解析文件并生成新文件的代码。 newfile
列表在写入文件之前临时存储每种类型的数据。以'type'
开头的行将触发newfile以存储该类型的结果,如果newfile
中有内容,则会将其写入文件。每次调用inc
时,writefile()
变量都会递增,并用作文件名的后缀。在writefile()
中,我使用str.format()
创建了一个动态文件名,并使用宽度为6的左对齐文件写入linelist
中任意多个值。
def writefile(newfilelist, suffix):
with open('file{}'.format(suffix), 'w') as f:
for linelist in newfilelist:
f.write(('{:<6}'*len(linelist)).format(*linelist) + '\n')
import os
with open('raw.txt') as file:
os.mkdir('raw')
os.chdir('raw')
newfile = []
inc = 0
for line in file:
linelist = line.split()
if linelist[0] == 'type':
if newfile:
inc += 1
writefile(newfile,inc)
newfile = []
newfile.append(linelist[1:])
else:
newfile.append(linelist[1:])
if newfile:
inc += 1
writefile(newfile,inc)