0

我的函数读取的文件格式为:

Column1 Column2 Column3 Column4
Value2  Value1  Value4  Value3
Value7  Value6  Value5  Value8
Value9  Value10 Value11 Value12

我阅读了该文件,对其进行过滤和排序,然后得到一个格式列表:

lines = [[Column1, Column2, Column3, Column4], [Value1, Value2, Value3, Value4], [Value5, Value6, Value7, Value8]]

现在,当我尝试写入文件(与原始文件格式相同)时,我无法正确格式化输出。这是我的代码:

for line in lines:
        outfile.write(line[0].strip()+'\t')
        outfile.write(line[1].strip()+'\t')
        outfile.write(line[2].strip()+'\t')
        outfile.write(line[3].strip()+'\t')

如果我将其更改为outfile.write(line[0].strip()+'\t'+'\n')或添加outfile.write('\n'),我的文件只是一个包含所有值的大列。

4

3 回答 3

1

您需要string.join(list)连接 的元素list并用 分隔它们的函数string。所以你会想要"\t".join(x.strip() for x in line). 但仅此一项并不能在每个字符串的末尾为您提供换行符。然后,您可以按如下方式添加换行符:"\t".join(x.strip() for x in line) + "\n"

如果你想一起做所有的线,你可以做到"\n".join('\t'.join(x.strip() for x in line) for line in lines)

此外,如果您使用print >>outfile, string语法,您可以在每行之后自动获取换行符:

for line in lines:
    print >>outfile, '\t'.join(x.strip() for x in line)
于 2013-07-27T20:46:14.070 回答
1

以下代码对我有用,我看到的问题是您在写完一行后没有添加换行符。

>>> with open('fileName', 'w') as outFile:
        for line in lines:
            for elem in line:
                outFile.write(elem.strip()+'\t')
            outFile.write('\n')

这给了我如下输出

Column1 Column2 Column3 Column4 
Value1  Value2  Value3  Value4  
Value5  Value6  Value7  Value8

为了

>>> lines = [['Column1', 'Column2', 'Column3', 'Column4'], ['Value1', 'Value2', 'Value3', 'Value4'], ['Value5', 'Value6', 'Value7', 'Value8']]

编辑- 要获得您正在寻找的输出,请使用

>>> with open('fileName', 'w') as outFile:
        for line in lines:
                outFile.write("\t".join([elem.strip() for elem in line]))
            outFile.write('\n')
于 2013-07-27T20:47:48.713 回答
0

这些答案很好。但是我建议使用 csv.reader 和 csv.writter

于 2013-07-27T20:55:02.183 回答