次のような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'])
(Python 3.2)
しかし、出力では、スクリプトはすべての行をスキップし、新しい列にはベリーのみが含まれています。
Output
Name Code Berry
blackberry 1 Berry
wineberry 2 Berry
rasberry 1 Berry
blueberry 1 Berry
mulberry 2 Berry
これにより、何をすべきかがわかります。
>>> 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)
ご注意ください
lineterminator
パラメータcsv.writer
。デフォルトではに設定されて'\r\n'
おり、これが2倍の間隔がある理由です。writerows
。ファイルが非常に大きい場合、これはおそらく良いアイデアではありませんが(RAM)、通常のファイルの場合、I / Oが少ないので高速だと思います。この投稿へのコメントに示されているように、2つのwith
ステートメントをネストする代わりに、同じ行で実行できることに注意してください。
open( 'C:/test/test.csv'、 'r')をcsvinputとして、open( 'C:/test/output.csv'、 'w')をcsvoutputとして:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加