Ich verwende den folgenden Code, um eine große CSV-Datei zu trennen, und ich möchte, dass der ursprüngliche CSV-Header in jede kleinere CSV-Datei geschrieben wird. Das Problem, das ich habe, ist jedoch, dass der aktuelle Code eine Zeile von Daten für jede kleinere Datei zu überspringen scheint. Im folgenden Beispiel würde also Zeile 51 nicht in die kleinere Datei geschrieben (Code geändert von http://code.activestate.com/recipes/578045-split-up-text-file-by-line-count/). Es scheint, diese Linie zu überspringen oder vielleicht ist es durch die Header überschrieben werden:Große Datei aufteilen, aber Kopfzeile zu jeder folgenden Datei hinzufügen
import os
filepath = 'test.csv'
lines_per_file=50
lpf = lines_per_file
path, filename = os.path.split(filepath)
with open(filepath, 'r') as r:
name, ext = os.path.splitext(filename)
try:
w = open(os.path.join(path, '{}_{}{}'.format(name, 0, ext)), 'w')
header = r.readline()
for i, line in enumerate(r):
if not i % lpf:
#possible enhancement: don't check modulo lpf on each pass
#keep a counter variable, and reset on each checkpoint lpf.
w.close()
filename = os.path.join(path,
'{}_{}{}'.format(name, i, ext))
w = open(filename, 'w')
w.write(header)
w.write(line)
finally:
w.close()
Also Original-Header ist Zeile 1 in der ursprünglichen Datei? Warum schreibst du es dann nicht in die erste 'Chunk'-Datei? – fghj
Für mich funktioniert Ihr Code sehr gut auf Python 2.7.11 und 3.5.1. (Nach dem Korrigieren der Einrückung der for-Schleife.) – Norman
Aber mit Python 2.7.11 produzieren inkonsistente Zeilenumbrüche falsche Zeilenanzahl. ('\ r' wird unter Windows 7 nicht als Zeilenumbruch erkannt.) – Norman