77

次のようなCSVファイルがいくつかあります。

Input
Name        Code
blackberry  1
wineberry   2
rasberry    1
blueberry   1
mulberry    2

次のようになるように、すべての CSV ファイルに新しい列を追加したいと思います。

Output
Name        Code    Berry
blackberry  1   blackberry
wineberry   2   wineberry
rasberry    1   rasberry
blueberry   1   blueberry
mulberry    2   mulberry

私がこれまでに持っているスクリプトはこれです:

import csv
with open(input.csv,'r') as csvinput:
    with open(output.csv, 'w') as csvoutput:
        writer = csv.writer(csvoutput)
        for row in csv.reader(csvinput):
            writer.writerow(row+['Berry'])

(パイソン3.2)

ただし、出力では、スクリプトはすべての行をスキップし、新しい列には Berry のみが含まれています。

Output
Name        Code    Berry
blackberry  1   Berry

wineberry   2   Berry

rasberry    1   Berry

blueberry   1   Berry

mulberry    2   Berry
4

10 に答える 10

101

これにより、何をすべきかがわかります。

>>> v = open('C:/test/test.csv')
>>> r = csv.reader(v)
>>> row0 = r.next()
>>> row0.append('berry')
>>> print row0
['Name', 'Code', 'berry']
>>> for item in r:
...     item.append(item[0])
...     print item
...     
['blackberry', '1', 'blackberry']
['wineberry', '2', 'wineberry']
['rasberry', '1', 'rasberry']
['blueberry', '1', 'blueberry']
['mulberry', '2', 'mulberry']
>>> 

編集、py3kで使用する必要があることに注意してくださいnext(r)

答えを受け入れてくれてありがとう。ここにボーナス(作業スクリプト)があります:

import csv

with open('C:/test/test.csv','r') as csvinput:
    with open('C:/test/output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput, lineterminator='\n')
        reader = csv.reader(csvinput)

        all = []
        row = next(reader)
        row.append('Berry')
        all.append(row)

        for row in reader:
            row.append(row[0])
            all.append(row)

        writer.writerows(all)

ご注意ください

  1. lineterminatorパラメータcsv.writer。デフォルトではに設定されて'\r\n'いるため、間隔が2倍になります。
  2. リストを使用してすべての行を追加し、。を使用してそれらを1回のショットで記述しますwriterows。ファイルが非常に大きい場合、これはおそらく良い考え(RAM)ではありませんが、通常のファイルの場合、I / Oが少ないため、より高速だと思います。
  3. この投稿へのコメントに示されているように、2つのwithステートメントをネストする代わりに、同じ行で実行できることに注意してください。

    open('C:/test/test.csv'、'r')をcsvinputとして、open('C:/test/output.csv'、'w')をcsvoutputとして:

于 2012-06-17T10:32:50.047 に答える
15
import csv
with open('input.csv','r') as csvinput:
    with open('output.csv', 'w') as csvoutput:
        writer = csv.writer(csvoutput)

        for row in csv.reader(csvinput):
            if row[0] == "Name":
                writer.writerow(row+["Berry"])
            else:
                writer.writerow(row+[row[0]])

多分そのような何かがあなたが意図したものですか?

また、csvはコンマ区切りの値を表します。したがって、次のように値を区切るには、カンマが必要です。

Name,Code
blackberry,1
wineberry,2
rasberry,1
blueberry,1
mulberry,2
于 2012-06-17T10:25:11.727 に答える
2

新しい列を追加する場所がわかりませんが、これを試してください。

    import csv
    i = 0
    Berry = open("newcolumn.csv","r").readlines()
    with open(input.csv,'r') as csvinput:
        with open(output.csv, 'w') as csvoutput:
            writer = csv.writer(csvoutput)
            for row in csv.reader(csvinput):
                writer.writerow(row+","+Berry[i])
                i++
于 2012-06-17T10:36:24.570 に答える