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')と、ファイルはすべての値を含む 1 つの大きな列にすぎません。

4

3 に答える 3

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')
于 2013-07-27T20:47:48.713 に答える
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 に答える
0

これらの答えは良いです。ただし、 csv.reader と csv.writter を使用することをお勧めします

于 2013-07-27T20:55:02.183 に答える