0

最初の列を除いて、ヘッダー行に不要な最初の文字を含む csv ファイルがあります。while ループはヘッダーから最初の文字を取り除き、新しいヘッダー行を新しいファイルに書き込みます (カウンターで終了)。その後、else ステートメントは残りの行を新しいファイルに書き込みます。問題は、else ステートメントがヘッダー行で始まり、2 回目に書き込むことです。for イテレータを中断せずに次の行を開始する方法はありますか? 実際のファイルは 21 列 x 400,000 行以上です。不要な文字は半角スペースですが、以下の例では見やすくするために * を使用しています。助けてくれてありがとう!

ファイル.csv =

あいうえお

1,2,3,4

import csv

reader = csv.reader(open('file.csv', 'rb'))

writer = csv.writer(open('file2.csv','wb'))

count = 0

for row in reader:
    while (count <= 0):
        row[1]=row[1][1:]
        row[2]=row[2][1:]
        row[3]=row[3][1:]
        writer.writerow([row[0], row[1], row[2], row[3]])
        count = count + 1
    else:
        writer.writerow([row[0], row[1], row[2], row[3]])
4

4 に答える 4

1

ヘッダーのみを変更し、残りの行を変更せずにコピーする場合:

with open('file.csv', 'r') as src, open('file2.csv', 'w') as dst:
    dst.write(next(src).replace(" ", ""))     # delete whitespaces from header
    dst.writelines(line for line in src)

追加の変換を行いたい場合は、この質問またはこの質問のようなことを行うことできます

于 2013-08-05T04:16:52.467 に答える
0

スペースを削除するだけの場合は、次を使用できます。

string.replace(" ", "")
于 2013-08-05T03:27:53.837 に答える
0

うーん...あなたの論理は少し遅れているようです。あなたが最初の行にいるかどうかを最初に確認するために、少しきれいだと思います。また、スペースを削除するもう少し慣用的な方法は、文字列のlstripメソッドを引数なしで使用して先頭の空白を削除することです。

列挙を使用して、行がヘッダーかどうかを確認してみませんか?

import csv

reader = csv.reader(open('file.csv', 'rb'))

writer = csv.writer(open('file2.csv','wb'))

for i, row in enumerate(reader):
    if i == 0:            
        writer.writerow([row[0], 
                         row[1].lstrip(), 
                         row[2].lstrip(), 
                         row[3].lstrip()])
    else:
        writer.writerow([row[0], row[1], row[2], row[3]])
于 2013-08-05T03:39:56.113 に答える