1

列の範囲 (具体的には、作業中のファイルの列 73 ~ 177) を削除するためのインポート可能なモジュールを作成しようとしています。フィールド名。このコードを変更して、csv ファイルの列 73 ~ 177 を削除したいと考えています。これを達成するために何をする必要がありますか?

def removeColumns(num1, num2, inputFILE, FileName):
    inPUTfile = open(inputFILE, 'r')
    outPUTfile = open(ファイル名, 'w')
    行 = inPUTfile.readline()
    while 行:
            # 指定された列を削除します。最初の列の範囲番号、2 番目の列の範囲番号 (+1)
            lineList = line.split('\t')
            removeCOL = "暦年"
            私は= 0
            while lineList[i] != removeCOL: #(linesout?):
                私 = 私 + 1
            lineList.pop(i) #list.append からこれらのフィールドを削除します
            #変更されたフィールドを書き込む
            remove = "\t".join(lineList)
            outPUTfile.write(line) #新しいフィールド名を書き込む outfile
            for line in inPUTfile: # 残りの各行からフィールド i を削除し、それを出力ファイルに書き込みます & 入力行を変更します
                lineList = line.split( ) #リストに変換
                lineList.pop(i) #リストからフィールドを削除
                line = '\t'.join(lineList)
                line = line + '\n' # 行末に改行を追加
                outPUTfile.write(line)# 変更した行を出力ファイルに書き込みます
            inPUTfile.close() #入力ファイルを閉じる
            outPUTfile.close() #出力ファイルを閉じる
    出力PUTファイルを返す
    プリントアウトPUTファイル
4

1 に答える 1

4

元のコードを変更する方法を尋ねられたことは承知していますが、ここでは、別の方法で変更する方法を理解する方が簡単だと思います。Python には、多くの作業を処理する便利なcsvモジュールがあります。何かのようなもの:

import csv

remove_from = 2
remove_to = 5

with open("to_delete.csv", "rb") as fp_in, open("newfile.csv", "wb") as fp_out:
    reader = csv.reader(fp_in, delimiter="\t")
    writer = csv.writer(fp_out, delimiter="\t")
    for row in reader:
        del row[remove_from:remove_to]
        writer.writerow(row)

変わるだろう

$ cat to_delete.csv 
a   b   c   d   e   f   g
1   2   3   4   5   6   7
8   9   10  11  12  13  14
15  16  17  18  19  20  21

の中へ

$ cat newfile.csv 
a   b   f   g
1   2   6   7
8   9   13  14
15  16  20  21
于 2013-04-24T17:21:35.687 に答える