<p>下面的代码可以满足您的需要,并且一次最多只能读取一个部分(为大文件节省内存)。将<code>in_path</code>和{<cd2>}分别替换为输入和输出文件路径:</p>
<pre><code>import csv
def print_section(section, f_out):
if len(section) > 0:
# find maximum column length
max_len = max([len(col) for col in section])
# build and print each row
for i in xrange(max_len):
f_out.write('\t'.join([col[i] if len(col) > i else '' for col in section]) + '\n')
f_out.write('\n')
with csv.reader(open(in_path, 'r')) as f_in, open(out_path, 'w') as f_out:
line = f_in.next()
section = []
for line in f_in:
# test for new "Test" section
if len(line) == 3 and line[0] == 'Test' and line[2] == '':
# write previous section data
print_section(section, f_out)
# reset section
section = []
# write new section header
f_out.write(line[1] + '\n')
else:
# add line to section
section.append(line)
# print the last section
print_section(section, f_out)
</code></pre>
<p>注意,您需要将<code>line[0] == 'Test'</code>语句中的<code>'Test'</code>更改为指示标题行的正确单词。在</p>
<p>这里的基本思想是,我们将文件导入到一个列表列表中,然后使用数组理解将该列表写回列表以进行转置(以及在列不均匀时添加空白元素)。在</p>