1

2000 行のデータを含む Excel の csv ファイルがあります。100 行のデータを異なるテキスト ファイルに出力したいと考えています。しかし、私はこれを行う方法がわかりません。私ができることは、ファイルを単一のファイルに出力することだけです。Python Pyscripter で CSV ファイル データを読み取り、次のようにファイルを 1 つのファイルに書き込みました。

def read_csv(self):
    with open(self.data, newline='') as f:
        reader = csv.reader(f)
        for row in reader:
            self.content.append(row)

def write_txt(self):
    f = open(self.txtoutput, 'w')
    for row in self.content:
        f.write(', '.join(row) + '\n')
    f.close()

ただし、2000行のデータの100行ごとに異なるテキストファイルに出力したいと思います。誰かが私を正しい方向に向けることができますか? 注: Python3 を使用しています。前もって感謝します。

4

5 に答える 5

2

一度に 100 行のチャンクで csv ファイルを反復処理し、各チャンクを個別のファイルに書き込みます。

with open(csv_filename, newline='') as file:
    chunks = zip(*[csv.reader(file)] * 100) # assume nrows % 100 == 0
    for i, rows in enumerate(chunks):
       with open("out%d.csv" % (i,), 'w', newline='') as output_file:
           csv.writer(output_file).writerows(rows)

チャンク内のリストを反復処理する最も「pythonic」な方法は何ですか? を参照してください。

于 2012-12-05T22:36:59.183 に答える
0

何かのようなもの

def write_txt(self):

    for index, row in enumerate(self.content):

        if index % 100 == 0:
            f = open(self.txtoutput + str(index) + ".txt", 'w')
            if index > 0:
                f.close()
        f.write(', '.join(row) + '\n')

    f.close()
于 2012-12-05T22:11:32.140 に答える
0

次のようなものが機能するはずです。

def write_txt(self):
    i = 0
    while i < len(self.content):
        with open(self.txtoutput + str(i/100), 'w') as f:
            for row in self.content[i:i+100]:
                f.write(', '.join(row) + '\n')
        i += 100

さまざまなテキスト ファイルの名前の付け方を指定しなかったため、self.txtoutput.

于 2012-12-05T22:11:50.080 に答える
0

例: 行ごとに 1 つずつ増加するカウンターがあり、それが 100 に達すると、出力ファイルを閉じて新しいファイルを開きます。

于 2012-12-05T22:07:56.053 に答える
0
def writeText(self):
    for index, offset in enumerate(range(0, len(self.content), 100)):
        with open(self.txtoutput + '{:03}'.format(index) + '.txt', 'w') as file:
            for eachRow in self.content[offset, offset+100]:
                file.write(', '.join(eachRow) + '\n')

余分な変数がないことは楽しいこともあります。これは、@FJ のソリューションのしばらくないバージョンです。ファイルリストで便利にソートできるように、先頭に 0 を付けて増分インデックスをフォーマットしました。

調整可能なrowCountを使用したリスト内包表記ソリューションは次のようになります(これはテストしていません):

def writeText(self):
    rowCount = 100
    for index, eachGlump in enumerate(self.content[i:i+rowCount] for i in range(0, len(self.content), rowCount)):
        with open(self.txtoutput + '{:03}'.format(index) + '.txt', 'w') as file:
            for eachRow in eachGlump:
                file.write(', '.join(eachRow) + '\n')
于 2012-12-05T22:28:17.890 に答える