0

明確化: したがって、ファイルに 10 行ある場合: 最初の行は見出しであるため、最初の行の最後にテキストを追加したい

次に、9つの要素を含むリストがあります..

そのリストを読み、各行の末尾に対応する要素を追加したい..

つまり、基本的に list[0] を 2 行目に、list[1] を 3 行目に、というように。


コンマで区切られたファイルがあります。このようなもの:

A,B,C
0.123,222,942
......

今、私はこのようなことをしたい:

A,B,C,D #append "D" just once
0.123,222,942,99293
............   

この「D」は実際にはリストに保存されているので、この「D」があります。これを行うにはどうすればよいですか? つまり、私は素朴な方法を知っています。各行を調べて、次のようなことをします

string += str(list[i])

基本的に、ファイルの最後にPythonicの方法で何かを追加するにはどうすればよいですか:)

4

2 に答える 2

4

新しいファイルを作成するだけです:

data = ['header', 1, 2, 3, 4]

with open("infile", 'r') as inf, open("infile.2", 'w') as outf:
    outf.writelines('%s,%s\n' % (s.strip(), n) for s, n in zip(inf, data))

入力ファイルを「更新」したい場合は、後で新しいファイルの名前を変更するだけです

import os
os.unlink("infile")
os.rename("infile.2", "infile")
于 2012-04-20T17:46:34.680 に答える
2

簡単な答え:モジュールを使用してcsvください。

長い答え:

import csv

newvalues = [...]

with open("path/to/input.csv") as file:
    data = list(csv.reader(file))

with open("path/to/input.csv", "w") as file:
    writer = csv.writer(file)
    for row, newvalue in zip(data, newvalues):
        row.append(newvalue)
        writer.writerow(row)

newvalues当然、これはファイル内の行数と同じ長さに依存します。そうでない場合はzip_longest、余分な行を特定の値で埋めるようなものを使用できます。

これを別のファイルに対して行う場合は、さらに簡単に行うことができます。

import csv

newvalues = [...]

with open("path/to/input.csv") as from, open("path/to/output.csv", "w") as to:
    reader = csv.reader(from)
    writer = csv.writer(to)
    for row, newvalue in zip(reader, newvalues):
        row.append(newvalue)
        writer.writerow(row)

これには、ファイル全体をメモリに読み込まないという利点もあるため、非常に大きなファイルの場合は、これがより良い解決策です。

于 2012-04-20T17:48:40.263 に答える