在列的行尾添加换行符

时间:2013-07-27 20:42:35

标签: python file-io

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

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'),我的文件只是一个包含所有值的大列。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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')

答案 2 :(得分:0)

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