43

このサイトの複数のユーザーからの入力を使用して、Pythonでcsvを作成することができました。あなたの投稿に感謝の意を表します。私は今困惑していて、最初の質問を投稿します。

input.csvは次のようになります。

day,month,year,lat,long
01,04,2001,45.00,120.00
02,04,2003,44.00,118.00

「年」列とそのすべてのエントリを削除しようとしています。合計で、1960年から2010年までの範囲の40以上のエントリがあります。

4

10 に答える 10

60
import csv
with open("source","rb") as source:
    rdr= csv.reader( source )
    with open("result","wb") as result:
        wtr= csv.writer( result )
        for r in rdr:
            wtr.writerow( (r[0], r[1], r[3], r[4]) )

ところで、forループは削除できますが、実際には単純化されていません。

        in_iter= ( (r[0], r[1], r[3], r[4]) for r in rdr )
        wtr.writerows( in_iter )

また、列を削除するための要件にハイパーリテラルな方法で固執することもできます。複数の列の削除には適用されないため、これは一般的に悪いポリシーだと思います。2 番目を削除しようとすると、位置がすべてずれており、結果の行が明確でないことがわかります。ただし、1 つの列のみで、これは機能します。

            del r[2]
            wtr.writerow( r )
于 2011-09-28T21:08:34.720 に答える
6

dict を使用して見出しを取得してからループすると、必要なものがきれいに取得されます。

import csv
ct = 0
cols_i_want = {'cost' : -1, 'date' : -1}
with open("file1.csv","rb") as source:
    rdr = csv.reader( source )
    with open("result","wb") as result:
        wtr = csv.writer( result )
        for row in rdr:
            if ct == 0:
              cc = 0
              for col in row:
                for ciw in cols_i_want: 
                  if col == ciw:
                    cols_i_want[ciw] = cc
                cc += 1
            wtr.writerow( (row[cols_i_want['cost']], row[cols_i_want['date']]) )
            ct += 1
于 2012-11-16T05:50:43.230 に答える
2

だけで列を直接削除できます

del variable_name['year']
于 2016-03-28T13:16:14.990 に答える
2

パッケージを使用csvしてcsvファイルを反復処理し、必要な列を別のcsvファイルに出力できます。

以下の例はテストされていないため、解決策を示す必要があります。

import csv

file_name = 'C:\Temp\my_file.csv'
output_file = 'C:\Temp\new_file.csv'
csv_file = open(file_name, 'r')
## note that the index of the year column is excluded
column_indices = [0,1,3,4]
with open(output_file, 'w') as fh:
    reader = csv.reader(csv_file, delimiter=',')
    for row in reader:
       tmp_row = []
       for col_inx in column_indices:
           tmp_row.append(row[col_inx])
       fh.write(','.join(tmp_row))
于 2011-09-28T20:06:21.370 に答える
2

私の頭の上から、これはエラーチェックや何かを設定する機能なしでそれを行います。それが「読者任せ」です。

outFile = open( 'newFile', 'w' )
for line in open( 'oldFile' ):
   items = line.split( ',' )
   outFile.write( ','.join( items[:2] + items[ 3: ] ) )
outFile.close()
于 2011-09-28T20:13:24.553 に答える
0

解析された CSV を保存する方法によって異なりますが、一般的には del 演算子が必要です。

辞書の配列がある場合:

input = [ {'day':01, 'month':04, 'year':2001, ...}, ... ]
for E in input: del E['year']

配列の配列がある場合:

input = [ [01, 04, 2001, ...],
          [...],
          ...
        ]
for E in input: del E[2]
于 2011-09-28T20:10:37.043 に答える